В нашем проекте у меня есть несколько тестов JUnit, которые, например, берут каждый файл из каталога и запускают на нем тест. Если я реализую testEveryFileInDirectory
метод в, TestCase
это будет отображаться как только один тест, который может быть неудачным или успешным. Но меня интересуют результаты по каждому отдельному файлу. Как я могу написать TestCase
/ так TestSuite
, чтобы каждый файл отображался как отдельный тест, например, в графическом TestRunner Eclipse? (Кодирование явного метода тестирования для каждого файла не является вариантом.)
Сравните также вопрос ParameterizedTest с именем в Eclipse Testrunner .
java
unit-testing
junit
parameterized-unit-test
Ханс-Петер Штёрр
источник
источник
Ответы:
Взгляните на параметризованные тесты в JUnit 4.
На самом деле я сделал это несколько дней назад. Попробую объяснить ...
Сначала создайте свой тестовый класс обычным образом, так как вы просто тестировали с одним входным файлом. Украсьте свой класс:
Создайте один конструктор, который принимает ввод, который будет изменяться при каждом тестовом вызове (в этом случае это может быть сам файл)
Затем создайте статический метод, который вернет
Collection
массив массивов. Каждый массив в коллекции будет содержать входные аргументы для вашего конструктора класса, например, файл. Украсьте этот метод:Вот образец класса.
Также проверьте этот пример
источник
JUnit 3
JUnit 4
источник
Параметризованные тесты Junit 5
Параметризованные тесты JUnit 5 поддерживают это, позволяя использовать метод в качестве источника данных :
Динамические тесты JUnit 5
JUnit 5 также поддерживает это через понятие a
DynamicTest
, которое должно быть сгенерировано в a@TestFactory
с помощью статического методаdynamicTest
.Тесты, запущенные в вашей IDE (здесь IntelliJ), будут отображаться следующим образом:
источник
Должно быть возможно в JUnit 3 путем наследования
TestSuite
и переопределенияtests()
метода для перечисления файлов и для каждого возврата экземпляра подкласса,TestCase
который принимает имя файла в качестве параметра конструктора и имеет тестовый метод, который проверяет файл, указанный в конструкторе.В JUnit 4 это могло быть еще проще.
источник
Вы можете рассмотреть возможность использования библиотеки JUnitParams , чтобы у вас было еще несколько (более чистых) вариантов:
Вы можете увидеть больше примеров использования здесь .
В дополнение к JUnitParams, почему писать параметризованные тесты с его помощью проще и удобнее :
источник
Если TestNG является вариантом, вы можете использовать параметры с DataProviders .
Результат каждого теста отдельного файла будет отображаться в текстовом отчете или в пользовательском интерфейсе плагина Eclipse TestNG. При общем количестве выполненных тестов будет учитываться каждый из ваших файлов индивидуально.
Это поведение отличается от JUnit Theories , в котором все результаты объединяются в одну «теоретическую» запись и считаются только за 1 тест. Если вам нужен отдельный отчет о результатах в JUnit, вы можете попробовать параметризованные тесты .
Тест и входы
Пример вывода
источник
У меня была аналогичная проблема, и в итоге я написал простой бегун JUnit 4, который позволяет med динамически генерировать тесты.
https://github.com/kimble/junit-test-factory
источник