web-dev-qa-db-fra.com

TestNG: plus d'un @DataProvider pour un @Test

J'utilise TestNG pour Eclipse.

Est-il possible de donner pas à pas deux fournisseurs de données à la fonction de test même?

Je pourrais mettre les deux fournisseurs en un, mais ce n'est pas ce que je veux.

J'ai besoin (pas comme dans cet exemple) de générer des données indépendamment.

@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 } };
    }

Je veux donner aux deux prestataires le même test. Est-ce possible?

 @Test(dataProvider = "dataSet1") // ??? and "dataSet2" ???
    public void testThisFunction(int val1, int val2) {
            boolean solution = Oracle(val1,val2);
            assert (solution);
   }
23
Malte Onken

Non, mais rien ne vous empêche de fusionner ces deux fournisseurs de données en un seul et de spécifier celui-ci comme votre fournisseur de données:

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);
}
33
Cedric Beust

Veuillez vous référer à cette réponse:

TestNG utilisant plusieurs DataProviders avec une seule méthode de test

Il est beaucoup plus propre et fonctionnera pour des choses plus complexes.

Peut-être que quelqu'un en aura besoin aussi, j'ai réécrit cette méthode public static T[] concatAll(T[] first, T[]... rest) d'une manière différente:

public static Object[] concat(Object[] first, Object[] second) {
    Object[] result = ArrayUtils.addAll(first, second);
    return result;
}
1
Alex
    @DataProvider
    public Object[][] combinedDataProvider() {
        return Stream.of(dp1(), dp2())
                .flatMap(Arrays::stream)
                .toArray(Object[][]::new);
    }
0
Wee