当前位置:  开发笔记 > Android > 正文

可以将参数传递给TestNG DataProvider吗?

如何解决《可以将参数传递给TestNGDataProvider吗?》经验,为你挑选了2个好方法。

我们希望针对一组数据运行我们的一些测试,验证每个测试的条件是否相同.数据当前存储在平面文件或简单的Excel电子表格中.

我的第一个想法是创建一个TestNG DataProvider,它将从文件加载数据,并用于为每个数据值调用一次测试方法.我的问题是不同的测试需要从不同的文件加载数据,似乎没有任何方法可以将参数发送到DataProvider. 有谁知道这是否可能?

理想情况下,我希望我的代码看起来像以下(简化示例):

public class OddTest {
    @DataProvider(name = "excelLoader")
    public Iterator loadExcelData(String fileName) {
        ...
    }

    @Test(dataProvider = "excelLoader" dataProviderParameters = { "data.xls" })
    public void checkIsOddWorks(int num)
        assertTrue(isOdd(num));
    }
}

desolat.. 17

您可以使用TestNG的依赖注入功能访问DataProvider中的所有已定义参数.这是一些需要"test_param"参数的DataProvider示例:

@DataProvider(name = "usesParameter")
public Object[][] provideTestParam(ITestContext context) {
    String testParam = context.getCurrentXmlTest().getParameter("test_param");
    return new Object[][] {{ testParam }};
}

这需要在您中定义"test_param" suite.xml:



    
    
        
            ...
        
    

有关ITestContext类的详细信息,请参阅TestNG JavaDoc.



1> desolat..:

您可以使用TestNG的依赖注入功能访问DataProvider中的所有已定义参数.这是一些需要"test_param"参数的DataProvider示例:

@DataProvider(name = "usesParameter")
public Object[][] provideTestParam(ITestContext context) {
    String testParam = context.getCurrentXmlTest().getParameter("test_param");
    return new Object[][] {{ testParam }};
}

这需要在您中定义"test_param" suite.xml:



    
    
        
            ...
        
    

有关ITestContext类的详细信息,请参阅TestNG JavaDoc.



2> 小智..:

取自TestNG文档:

如果将@DataProvider声明java.lang.reflect.Method为第一个参数,TestNG将传递第一个参数的当前测试方法.当多个测试方法使用相同的@DataProvider并且您希望它根据为其提供数据的测试方法返回不同的值时,这尤其有用.

例如,以下代码在其@DataProvider中打印测试方法的名称:

@DataProvider(name = "dp")
public Object[][] createData(Method m) {
  System.out.println(m.getName());  // print test method name
  return new Object[][] { new Object[] { "Cedric" }};
}

@Test(dataProvider = "dp")
  public void test1(String s) {
}

@Test(dataProvider = "dp")
  public void test2(String s) {
}

因此将显示:

test1
test2

这也可以与desolat提供的解决方案相结合,以相应地确定来自上下文和方法的数据:

    @DataProvider(name = "dp")
    public Object[][] foodp(ITestContext ctx, Method method) {
        // ...
    }

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有