使用DataProvider重载Selenium WebDriver测试用例

时间:2015-06-08 18:45:22

标签: 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");
    }

    @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   参数但方法[项目结构已删除] .testFunc需要1

我已经没有想法......完全有可能这根本无法完成,但这似乎是一个非常基本的问题而且我一定会错过一些东西!

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我想在这里你可以使用reflect.Method概念。我已经复制了TestNG文档,请参考 http://testng.org/doc/documentation-main.html#parameters-dataproviders了解更多详情

如果声明@DataProvider将java.lang.reflect.Method作为第一个参数,TestNG将传递第一个参数的当前测试方法。当多个测试方法使用相同的@DataProvider并且您希望它根据为其提供数据的测试方法返回不同的值时,这尤其有用。 例如,以下代码在其@DataProvider中打印测试方法的名称:

@DataProvider(name =“dp”)

public Object [] [] createData(Method m){

的System.out.println(m.getName()); //打印测试方法名称

return new Object [] [] {new Object [] {“Cedric”}}; }

@Test(dataProvider =“dp”)

public void test1(String s){ }

@Test(dataProvider =“dp”)

public void test2(String s){ }

因此会显示:

查看sourceprint?

TEST1

TEST2