Java 使用DataProvider重载Selenium WebDriver测试用例

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

正如标题所说,我一直在尝试重载Selenium测试用例,但迄今为止没有成功。这是我的密码:

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我已经获得了与第二个测试方法和第二个数据提供程序相当的功能,但我不应该这么做!