Недавно в JUnit (начиная с версии 4.4) была добавлена новая концепция Теории.
В двух словах, вы можете пометить свой тестовый метод аннотацией @Theory
(вместо @Test
), сделать свой тестовый метод параметризованным и объявить массив параметров, помеченных аннотацией @DataPoints
, где-нибудь в том же классе.
JUnit будет последовательно запускать ваш параметризованный тестовый метод, передавая параметры, извлеченные из @DataPoints
, один за другим. Но только до тех пор, пока первый такой вызов не завершится неудачей (по любой причине).
Концепция кажется очень похожей на @DataProviders
из TestNG, но когда мы используем поставщиков данных, все сценарии выполняются независимо от результатов их выполнения. И это полезно, потому что вы можете видеть, сколько сценариев работает/не работает, и вы можете более эффективно исправить свою программу.
Итак, мне интересно, в чем причина не выполнять @Theory
-маркированный метод для каждого @DataPoint
? (Оказывается, не так сложно унаследовать от Theories runner и сделать пользовательский runner, который будет игнорировать сбои, но почему мы не имеем такого поведения из коробки?)
UPD: Я создал отказоустойчивую версию Theories runner и выложил ее в открытый доступ: https://github.com/rgorodischer/fault-tolerant-theories
Для сравнения со стандартным Theories runner запустите StandardTheoriesBehaviorDemo, затем FaultTolerantTheoriesBehaviorDemo, которые находятся в папке src/test/....
папке.