2012-05-31 4 views
16

Я использую TestNG для Eclipse.TestNG: Более одного @DataProvider для одного @Test

Мой вопрос в том, можно ли предоставить двум поставщикам данных шаг за шагом на такой же тест-функция? Я мог бы поставить обоих поставщиков в одном, но это не то, что я хочу. Мне нужно (не как в этом примере) генерировать независимо данные.

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

Я хочу предоставить BOTH-провайдерам тот же тест. Это возможно?

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

ответ

23

Нет, но ничто не мешает вам от слияния этих двух поставщиков данных в одну и указав, что один в качестве поставщика данных:

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); 
} 
-4

Да,

Вы можете написать @test (DataProvider = "name_of_first_dataprovider, name_of_second_dataprovider")

+0

Если используется как это, какой поставщик данных будет использоваться для тестирования? – hotzst

+2

Это было бы хорошо, но не работает для меня. Какая версия TestNG поддерживает этот синтаксис dataProvider? – Gary

+2

У этого нет базы, он не работает и не указывает на какую-либо документацию, определяющую такую ​​функциональность – Ordiel

1

Пожалуйста, обратитесь к этому ответу:

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; 
} 
Смежные вопросы