我正在用美妙的TestNG框架進行測試。我的問題是,是否可以在testng.xml配置文件中爲@ Test-annotation設置註釋? 我不想硬編碼@測試的註釋像是否可以通過testng.xml在TestNG中設置註釋?
@Test(dataProvider = "dataFileProvider", dataProviderClass = TestDataProvider.class)
我想配置它在testng.xml文件
我正在用美妙的TestNG框架進行測試。我的問題是,是否可以在testng.xml配置文件中爲@ Test-annotation設置註釋? 我不想硬編碼@測試的註釋像是否可以通過testng.xml在TestNG中設置註釋?
@Test(dataProvider = "dataFileProvider", dataProviderClass = TestDataProvider.class)
我想配置它在testng.xml文件
我已經在這種情況下,有兩個思路:
Workaraound 1::StaticProvider
如果需要
Workaraound 2,您可以輕鬆地改變靜態提供商210
從未嘗試過這一點,但即使必須抓住XML的數據手動
期待博伊斯特先生的回答應該工作...;)
簡短的回答是:不,你可以不要從testng.xml
向您的代碼添加註釋。
如Frank所解釋的,您可以使用Annotation Transformer修改現有的註釋。
有時,你只是真的想做點什麼,而不能像訪問私有變量來修復內存泄漏一樣。搞清楚如何做這樣的事情,儘管事實上你不能很有趣。如果你真的想要的話,我可能會建議在運行加載testng.xml文件之前使用TestNG對象來運行你的套件。個人而言,我喜歡使用'mvn test',不幸的是,添加pom.xml代碼以從testng xml文件運行將需要您提供testng.xml文件,因此'mvn test'將不起作用。始終確保95%的程序員使用工作,然後允許重寫。
因此,我可能會建議您自己擴展testng.xml文件,並編寫一些代碼來讀取testng.xml文件並使用註釋轉換器類配置註釋。
下面是一些代碼,讓你開始:
public class TestNGSuite {
public static void main(String[] args) {
System.out.println("main start");
try {
new TestNGSuite(new Class[]{ Demo.class });
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("main finish");
}
public TestNGSuite(Class[] classes) throws Exception {
// Create Suite List
List<XmlSuite> suites = new ArrayList<XmlSuite>();
// Add Suite to Suite List
XmlSuite suite = new XmlSuite();
suites.add(suite);
suite.setName("MyTestSuite");
// Add Test to Suite
XmlTest test = new XmlTest(suite);
test.setName("MyTest");
// Add Class List to Test
List<XmlClass> xmlClasses = new ArrayList<XmlClass>();
test.setXmlClasses(xmlClasses);
// Add Class to Class List
for(Class clazz: classes) {
XmlClass xmlClass = new XmlClass(clazz);
xmlClasses.add(xmlClass);
}
// Run TestNG
TestNG testNG = new TestNG();
testNG.setXmlSuites(suites);
testNG.addListener(new TestNGAnnotationTransformer(methodName));
testNG.addListener(new TestNGSuiteConsoleLogger());
testNG.run();
if(testNG.hasFailure()) { // Throw an exception to make mvn goal fail
throw new Exception("Failed Tests");
}
}
public static class TestNGSuiteConsoleLogger extends TestListenerAdapter{
@Override
public void onTestFailure(ITestResult tr) {
Console.log(TestNGSuiteConsoleLogger.class, "FAILURE:"+tr.getMethod());
tr.getThrowable().printStackTrace();
}
}
public static class TestNGAnnotationTransformer implements IAnnotationTransformer{
String methodToRun;
public TestNGAnnotationTransformer(String methodName) {
methodToRun = methodName;
}
public void transform(ITestAnnotation annotation, Class arg1,
Constructor arg2, Method testMethod) {
if (methodToRun.equals(testMethod.getName())) {
annotation.setEnabled(true);
}
}
}
}
如果你想運行Demo.class,確保有一個與TestNG的註解「@Test」有一個方法。