2015-12-02 5 views
1

Вот мой DataProviderTestNG не учитывает DataProvider тесты индивидуально

@DataProvider(name = "arrayBuilder") 
public Object[][] parameterTestProvider() { 
    //Code to obtain retailerIDList 
    String[] retailerIDArray = retailerIDList.toArray(new String[retailerIDList.size()]); 
assertEquals(1295, retailerIDList.size(), "Expected 1295, found " + retailerIDList.size() + " docs"); 
    return new Object[][] {{retailerIDArray}}; 
} 

и это мой тест

@Test(dataProvider = "arrayBuilder", invocationCount = 1, threadPoolSize = 1) 
public void getRetailer(String[] retailerIDList) { 

    for (String retailer_ID : retailerIDList) { 
     //Code that uses the retailerID 
} 

Когда я выполнить этот тест, выходные списки TestNG «getRetailer» в качестве единственного теста. У меня есть 1295 записей, возвращаемых dataprovider, и я хочу сообщить о 1295 тестах. Что мне не хватает?

+0

ли это запустить метод 1295 раз для каждой строки данных? если нет, то ваша реализация поставщика данных неверна. Если он запустил это много раз, он предоставил результаты для каждого используемого набора тестовых данных. Пожалуйста, внимательно изучите отчет. – Shamik

+0

Я положил отладочные сообщения в тесте, и я могу правильно отобразить каждое из значений 1295. DataProvider работает хорошо, за исключением того, что TestNG сообщает об этом в виде единого теста. – Jai

+0

Какой отчет вы смотрите. В обоих отчетах emailable-report.html и index.html в папке результатов теста я могу видеть отдельные строки для каждой строки поставщика данных, не делая ничего лишнего. Можете ли вы сказать мне, на какой отчет вы смотрите. – Shamik

ответ

1

Пожалуйста, используйте это, он должен работать. Вам нужно вернуть массив объектов, где каждая строка представляет собой строку данных, которую вы хотите использовать для теста. Тогда только он войдет в отчет. То, что вы делали, было отправкой массива, поэтому он рассматривал его как один тест.

@DataProvider(name="provideData") 
    public Iterator<Object[]> provideData() throws Exception 
    { 
     List<Object[]> data = new ArrayList<Object[]>(); 
     String[] retailerIDArray = retailerIDList.toArray(new String[retailerIDList.size()]); 
     assertEquals(1295, retailerIDList.size(), "Expected 1295, found " + retailerIDList.size() + " docs"); 
     for(String retailerID : retailerIDArray){ 

      data.add(new Object[]{retailerID}); 

     } 

     return data.iterator(); 

    } 

@Test(dataProvider = "provideData") 
public void getRetailer(String retailerIDList) { 

    for (String retailer_ID : retailerIDList) { 
     //Code that uses the retailerID 
    } 
} 

Для получения дополнительной информации, пожалуйста, пройти через документации here

+0

@Test (dataProvider = "предоставитьData") public void getRetailer (String retailerID) { // Код для работайте непосредственно над каждым элементом итерации, то есть retailerID } Спасибо, двойной массив не нужен и немного запутанный imho. – Jai

+0

Добро пожаловать. Да, это не обязательно в вашем случае. Я скопировал его из моей реализации, где это необходимо, поскольку есть несколько параметров. Можете ли вы принять его в качестве ответа, если он сработал для вас. – Shamik

0

DataProviders самостоятельно, итерации для каждого набора данных, приведут к совокупному результату для теста вместо результата для каждой итерации.

Попробуйте использовать испытательную фабрику вместе с DataProvider для индивидуального результата для каждой итерации теста.

http://testng.org/doc/documentation-main.html#factories

Смежные вопросы