TestNG:一个@Test 有多个@DataProvider

Posted

技术标签:

【中文标题】TestNG:一个@Test 有多个@DataProvider【英文标题】:TestNG: More than one @DataProvider for one @Test 【发布时间】:2012-06-05 15:22:40 【问题描述】:

我将TestNG 用于Eclipse

是否可以逐步将两个数据提供者提供给相同的测试功能?

我可以将两个提供商合二为一,但这不是我想要的。

我需要(不像本例那样)独立生成数据。

@DataProvider(name = "dataSet1")
public Object[][] createDataX() 
    return new Object[][]   1, 1 ,  2, 2  ;


@DataProvider(name = "dataSet2")
public Object[][] createDataY() 
    return new Object[][]   0, 0 ,  3, 3  ;

我想让两个提供者都接受相同的测试。这可能吗?

@Test(dataProvider = "dataSet1") // ??? and "dataSet2" ???
public void testThisFunction(int val1, int val2) 
    boolean solution = oracle(val1,val2);
    assert (solution);

【问题讨论】:

【参考方案1】:

不,但没有什么能阻止您将这两个数据提供者合并为一个并将其指定为您的数据提供者:

public Object[][] dp1() 
  return new Object[][] 
      new Object[]  "a", "b" ,
      new Object[]  "c", "d" ,
  ;


public Object[][] dp2() 
  return new Object[][] 
      new Object[]  "e", "f" ,
      new Object[]  "g", "h" ,
  ;


@DataProvider
public Object[][] dp() 
  List<Object[]> result = Lists.newArrayList();
  result.addAll(Arrays.asList(dp1()));
  result.addAll(Arrays.asList(dp2()));
  return result.toArray(new Object[result.size()][]);


@Test(dataProvider = "dp")
public void f(String a, String b) 
  System.out.println("f " + a + " " + b);

【讨论】:

您觉得这种方法如何groups.google.com/forum/#!topic/testng-users/NutRyPEyqLI ?【参考方案2】:
@DataProvider
public Object[][] combinedDataProvider() 
    // Using stream to combine the two separate data providers.
    return Stream.of(dp1(), dp2())
                 .flatMap(Arrays::stream)
                 .toArray(Object[][]::new);

【讨论】:

【参考方案3】:

请参考这个答案:

TestNG using multiple DataProviders with single Test method

它更干净,可以处理更复杂的事情。

也许有人也会需要它,我用不同的方式重写了这个方法public static T[] concatAll(T[] first, T[]... rest)

public static Object[] concat(Object[] first, Object[] second) 
    Object[] result = ArrayUtils.addAll(first, second);
    return result;

【讨论】:

【参考方案4】:

是的,

你可以写@Test(dataProvider="name_of_first_dataprovider,name_of_second_dataprovider")

【讨论】:

如果这样使用,测试将使用哪个数据提供者? 这很好,但对我不起作用。哪个版本的 TestNG 支持这种 dataProvider 语法? 这没有任何基础,它不起作用并且它没有指向任何指定此类功能的文档

以上是关于TestNG:一个@Test 有多个@DataProvider的主要内容,如果未能解决你的问题,请参考以下文章

TestNG简单的学习类和方法级别@Test的区别

testng.xml 执行多个测试用例

Java技术指南「TestNG专题」单元测试框架之TestNG使用教程指南(下)

TestNG中group的用法

如何通过打开多个窗口一次使用 Selenium TestNG 执行负载测试

从 Maven 命令行 TestNG 更改 .properties 值