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);
}
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);
}
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;
}
@DataProvider
public Object[][] combinedDataProvider() {
return Stream.of(dp1(), dp2())
.flatMap(Arrays::stream)
.toArray(Object[][]::new);
}