TestNG пропускает тест после возникновения исключения в методе @DataProvider

Я немного смущен.

Как я могу заставить TestNG сообщить об ошибке теста?

// ...
@DataProvider(name = "foo")
public Object[][] provideData () {
    throw new SomeRuntimeException("Some error occurred. The test configuration "
            + "is somehow incorrect.");
}

Это просто приведет к пропуску теста. Исключение даже не регистрируется. Перемещение этого в конструктор просто зарегистрирует исключение, но этого недостаточно...

Я хочу большое жирное сообщение об ошибке.

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

В любом случае, было бы неплохо узнать, как выглядит определение ошибки в testNG.

Спасибо за любые подсказки!


person Doe Johnson    schedule 26.05.2014    source источник
comment
Можете ли вы показать нам код, который вызывает это? Вы уверены, что это каким-то образом не завернуто в try/catch?   -  person Chris Thompson    schedule 26.05.2014
comment
Метод, ссылающийся на dataProvider, никоим образом не знает ни об одном исключении.   -  person Doe Johnson    schedule 26.05.2014
comment
Насколько я понимаю, сам тестовый метод не вызывает поставщика данных. Тестовый метод вызывается с параметрами, предоставленными поставщиком данных.   -  person Doe Johnson    schedule 26.05.2014
comment
DataProvider является частью преамбулы для тестов и, как таковой, не сообщается как ошибка. Вы несете ответственность за обнаружение и регистрацию любых ошибок в методе DataProvider.   -  person Bob Dalgleish    schedule 26.05.2014
comment
Очень жаль. Интересно, есть ли возможность вызвать ошибку напрямую. Это не нужно делать в DataProvider. Я имею в виду вообще, есть ли способ?   -  person Doe Johnson    schedule 26.05.2014
comment
Поведение TestNG DataProvider действительно противоречит здравому смыслу. Я только что потратил пару часов на эту проблему: я не мог понять, почему мои тесты не работают. Однако ваш вопрос и ответ Романа поставили меня на правильный путь: оказывается, из моего DataProvider выбрасывалось исключение. Спасибо вам обоим!   -  person jub0bs    schedule 02.06.2018


Ответы (1)


Вот статья, которая предлагает хороший набор альтернатив с достаточно подробными объяснениями:

Отказ вместо пропуска Проверьте, когда поставщик данных TestNG выдает исключение

На мой взгляд, лучше всего было добавить тест для поставщиков данных, и вот краткая иллюстрация идеи:

public class MyClass {

    @DataProvider(name = "my-data-provider")
    private Object [][] myProvider() {
        // ...
    }

    @Test
    public void testDataProviders() {
        Assert.assertTrue(myProvider().length > 0);
    }

    @Test
    // ... Real tests.

}
person Roman Nikitchenko    schedule 10.01.2015
comment
Вопрос довольно старый, но проблема все еще очень актуальна в моих глазах. Большое спасибо! Статья действительно полезная. - person Doe Johnson; 31.01.2015