несколько dataProvider на один тест в TestNG

Я хочу запустить одни и те же тесты для разных реализаций. В этом случае я должен предоставить два dataProvider. Один для реализации, а другой для дополнительных данных. Поэтому я написал smt как

@DataProvider(name = "ind")
public Object[][] indexes(){
    return new Object[][]{{1}, {2.5}};
}

@DataProvider(name = "str")
public Object[][] strings(){
    return new Object[][]{{"a11", "a12"}, {"a21", "a22"}};
}

 public Object[][] decart(Object[][] a1, Object[][] a2){
    List<Object[]> rez = new LinkedList();
    for(Object[] o : a1){
        for(Object[] o2 : a2){
            rez.add(concatAll(o, o2));
        }
    }
     return rez.toArray(new Object[0][0]);
}

//in future, probably, I will need do decart for varargs two.
public static <T> T[] concatAll(T[] first, T[]... rest) {
  int totalLength = first.length;
  for (T[] array : rest) {
    totalLength += array.length;
  }
  T[] result = Arrays.copyOf(first, totalLength);
  int offset = first.length;
  for (T[] array : rest) {
    System.arraycopy(array, 0, result, offset, array.length);
    offset += array.length;
  }
  return result;
}

@DataProvider(name = "mixed")
public Object[][] mixed(){
    return decart(indexes(),  strings());
}


@Test(dataProvider = "mixed")
public void someTest(Number i, String s1, String s2){
    System.out.println(i + "\t" + s1 + "\t" + s2);
}

Но этот код кажется очень неестественным. Я думаю, что сделал это неправильно. Как я должен думать, как это?


person Stan Kurilin    schedule 24.12.2010    source источник


Ответы (1)


Нет, это почти все: если вы хотите объединить несколько поставщиков данных, вы создаете другого поставщика данных, который вызывает другие и объединяет результаты.

person Cedric Beust    schedule 24.12.2010
comment
Ok. Спасибо. Но почему бы вам не создать что-нибудь для этой операции? - person Stan Kurilin; 24.12.2010