Тестирование на необязательное исключение в параметризованном тесте JUnit 4+ - PullRequest
2 голосов
/ 02 сентября 2011

Я пытаюсь написать модульный тест для метода, который принимает строку как метра и выдает исключение, если оно искажено (И НЕТ, если все в порядке). Я хочу написать параметризованный тест, который подается в несколько строк и ожидаемое исключение (ВКЛЮЧАЯ случай, когда ничего не выбрасывается, если ввод Строка хорошо сформирована!). Если вы пытаетесь использовать @Test (ожидать = SomeException.class) Аннотация, я столкнулся с двумя проблемами:

  1. Ожидается = ноль не допускается. Так как же я могу проверить ожидаемый результат без исключения? (для правильно сформированных строк ввода)?

  2. ожидать = невозможно? Я еще не пробовал, но я сильно подозреваю, что это так после читая это (не могли бы вы сказать, правда ли это?): http://tech.groups.yahoo.com/group/junit/message/19383 Тогда это, кажется, лучшее решение, которое я нашел. О чем вы думаете это, особенно по сравнению с этим: Как проверить исключения в параметризованном тесте?

Заранее благодарю за любую помощь, жду обсуждения:)

Ответы [ 3 ]

5 голосов
/ 02 сентября 2011

Создайте два класса тестовых наборов:

  • ValidStringsTest
  • InvalidStringsTest

Очевидно, что первый тестирует все виды допустимых входных данных (без исключения), тогда как второй всегда ожидает исключения.

Помните: читаемость ваших тестов даже важнее, чем читаемость рабочего кода. Не используйте дурацкие флаги, условия и логику в тестовых примерах JUnit. Простота - король.

Также см. Мой ответ здесь для подсказки, как правильно проверять исключения.

1 голос
/ 02 сентября 2011

Есть два разных теста - один для действительных входных данных и один для недействительных.Я не использовал JUnit 4, поэтому я не могу комментировать точный формат аннотации - но в основном у вас будет один параметризованный тест с различными различными недопустимыми входами, который говорит, что он действительно ожидает исключения, иотдельный тест с различными действительными входами, который ничего не говорит об исключениях.Если выдается исключение, когда ваш тест не говорит, что так и должно быть, тест не пройден.

0 голосов
/ 25 июня 2012

Разделение тестовых наборов на два тестовых класса является подходящим подходом во многих случаях - как уже отмечали Томаш и Джон.

Но есть и другие случаи, когда это разделение не является хорошим выбором только с точки зрениячитаемость.Давайте предположим, что строки в тестируемом наборе данных имеют естественный порядок, и если строки отсортированы по этому естественному порядку, может быть легко увидеть, охватывают ли тестовые данные все соответствующие варианты использования.Если разбить тестовые наборы на два тестовых класса, более не существует простого способа проверить, охватываются ли все соответствующие тестовые наборы.Для этих случаев Как мне проверить исключения в параметризованном тесте? кажется, чтобы обеспечить действительно лучшее решение.

...