【问题标题】:TestNG: More than one @DataProvider for one @TestTestNG:一个@Test 有多个@DataProvider
【发布时间】: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);
}

【问题讨论】:

    标签: java testing automated-tests testng dataprovider


    【解决方案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);
    }
    

    【讨论】:

    【解决方案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 语法?
        • 这没有任何基础,它不起作用并且它没有指向任何指定此类功能的文档
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 2015-07-26
        相关资源
        最近更新 更多