Java 使用DataProvider重载Selenium WebDriver测试用例
正如标题所说,我一直在尝试重载Selenium测试用例,但迄今为止没有成功。这是我的密码:Java 使用DataProvider重载Selenium WebDriver测试用例,java,testng,overloading,Java,Testng,Overloading,正如标题所说,我一直在尝试重载Selenium测试用例,但迄今为止没有成功。这是我的密码: public class testClass { @Test(dataProvider="testProvider") public void testFunc(String value) throws Exception{ System.out.println("The only value provided was a string"); } @Tes
public class testClass {
@Test(dataProvider="testProvider")
public void testFunc(String value) throws Exception{
System.out.println("The only value provided was a string");
}
@Test(dataProvider="testProvider")
public void testFunc(String value, int myValue) throws Exception{
System.out.println("The two values provided are a string and an integer");
}
@DataProvider(name="testProvider")
public static Object[][] testProvider(){
return new Object[][]{ {"someString"}, {"someString", 5} };
}
}
当我运行此代码时,第一个测试用例(仅传递“someString”时)成功,但第二个测试用例(同时传递“someString”和5)失败,并显示以下消息:
org.testng.TestNGException:数据提供程序正在尝试通过2
参数,但方法[project structure removed]。testFunc接受1
我已经没有想法了…这完全有可能根本无法做到,但这似乎是一个非常基本的问题,我一定错过了什么
谢谢你的帮助 我认为这里可以使用reflect.Method概念。我已经复制了TestNG文档,请参考 欲知详情 如果将@DataProvider声明为将java.lang.reflect.Method作为第一个参数,TestNG将通过第一个参数的当前测试方法。当多个测试方法使用相同的@DataProvider,并且您希望它根据为哪个测试方法提供数据返回不同的值时,这一点特别有用。 例如,以下代码在其@DataProvider中打印测试方法的名称: @数据提供者(name=“dp”) 公共对象[][]createData(方法m){ System.out.println(m.getName());//打印测试方法名称 返回新对象[]{new Object[]{“Cedric”}; } @测试(dataProvider=“dp”) 公共void test1(字符串s){ } @测试(dataProvider=“dp”) 公共void test2(字符串s){ } 因此将显示: 查看源打印 测试1
test2根据您的代码,您将向这两个方法传递两组数据,因此2组将通过,2组将失败,您的代码将不会帮助您获得预期的结果。你不能使用2个数据提供者吗?@skumar有趣的是,这不是我得到的输出。这是我的输出:
提供的唯一值是字符串==================================================================================TestSuite Total tests run:3,Failures:2,Skips:0================================================================================/code>@skumar我已经获得了与第二个测试方法和第二个数据提供程序相当的功能,但我不应该这么做!