【发布时间】:2018-03-22 16:41:19
【问题描述】:
我正在使用 TestNG 创建一个测试用例,该测试用例使用 DataProvider 将数据提供给工厂,该工厂用于测试用例类的构造函数以在类中设置变量。我已将我的 DataProvider 放在一个单独的类中以实现模块化(因为我希望我的测试用例数量会变得相当大,我需要重用 DataProviders。示例如下所示:
包含 DataProvider 的类:
public class DP {
@DataProvider(name="testData")
public Object[][] testData() {
return new Object[][] {
{ "tc1", "1" },
{ "tc2", "2" },
{ "tc3", "3" }
};
}
}
包含测试用例的类:
public class SampleTestCase {
String[] params;
@Factory(dataProviderClass=DP.class, dataProvider="testData")
public SampleTestCase(String[] params) {
System.out.println("Constructor...");
for(String s : params)
System.out.println(s);
this.params = params;
}
@Test
public void tc1() {
System.out.println("tc1...");
for(String s : params)
System.out.println(s);
}
@Test(dependsOnMethods="tc1")
public void tc2() {
System.out.println("tc2...");
for(String s : params)
System.out.println(s);
}
}
当我尝试运行它时,我收到以下错误:
org.testng.TestNGException:工厂方法类 com.company.automation.regression.SampleTestCase.com.company.automation.regression.SampleTestCase() 抛出异常 org.testng.internal.FactoryMethod.invoke(FactoryMethod.java:121) 在 org.testng.internal.TestNGClassFinder.(TestNGClassFinder.java:153) 在 org.testng.internal.TestNGClassFinder.(TestNGClassFinder.java:40) 在 org.testng.TestRunner.initMethods(TestRunner.java:403) 在 org.testng.TestRunner.init(TestRunner.java:252) 在 org.testng.TestRunner.init(TestRunner.java:222) 在 org.testng.TestRunner.(TestRunner.java:171) 在 org.testng.remote.support.RemoteTestNG6_10$1.newTestRunner(RemoteTestNG6_10.java:28) 在 org.testng.remote.support.RemoteTestNG6_10$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG6_10.java:61) 在 org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:623) 在 org.testng.SuiteRunner.init(SuiteRunner.java:189) 在 org.testng.SuiteRunner.(SuiteRunner.java:136) 在 org.testng.TestNG.createSuiteRunner(TestNG.java:1375) 在 org.testng.TestNG.createSuiteRunners(TestNG.java:1355) 在 org.testng.TestNG.runSuitesLocally(TestNG.java:1209) 在 org.testng.TestNG.runSuites(TestNG.java:1133) 在 org.testng.TestNG.run(TestNG.java:1104) 在 org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114) 在 org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77) 引起 作者:org.testng.TestNGException:无法实例化类 com.company.automation.regression.SampleTestCase 在 org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:40) 在 org.testng.internal.FactoryMethod.invoke(FactoryMethod.java:107) ... 19 更多原因:java.lang.IllegalArgumentException:错误 参数数量 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知 来源)在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 来源)在 java.lang.reflect.Constructor.newInstance(未知来源) 在 org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:29) ... 20 更多
如果我将SampleTestCase的构造函数的参数从String[] params更改为String p1, String p2,那么它可以正常工作。我唯一的问题是我的 DataProvider 中有大量参数(即 10 多个参数)。一旦我可以正常工作,我计划将它们加载到哈希映射中......
提前谢谢你!
【问题讨论】:
标签: java testng testng-dataprovider