是否可以向TestNG DataProvider传递参数?[英] Possible to pass parameters to TestNG DataProvider?

本文是小编为大家收集整理的关于是否可以向TestNG DataProvider传递参数?的处理方法,想解了是否可以向TestNG DataProvider传递参数?的问题怎么解决?是否可以向TestNG DataProvider传递参数?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

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

理想情况下,我希望我的代码如下所示(简化示例):

public class OddTest {
    @DataProvider(name = "excelLoader")
    public Iterator<Object[]> loadExcelData(String fileName) {
        ...
    }

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

推荐答案

取自 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) {
        // ...
    }

本文地址:https://www.itbaoku.cn/post/1794064.html