Предупреждение: я знаю, что JUnit для UNIT тестов и цена им небольшая. Речь о применении JUnit в ИНТЕГРАЦИОННЫХ тестах. И с другой стороны, на тех проектах, где мне приходилось работать, интеграционное тестирование проводилось вручную. Можно это дело автоматизировать.
Сами интеграционные тесты должны быть в отдельном проекте, не вместе с проектом/проектами. Что будет использовано в самих тестах решать самим (н.п. применить JUnit для тестирования REST, используя RestTemplate https://v.perm.ru/main/index.php/34-behave-testirovanie/ ).
Примеры тестирования https://javabydeveloper.com/junit-5-with-allure-reports-example/. В примере очень подробно описана работа с Allure, с различными группировками и прочими возможностями. Что будет протестировано, Rest или что-то другое, не важно.
Проведение тестов:
git clone https://github.com/javabydeveloper/Junit-5-tutorials-master/tree/master/junit5-allure-report-example cd junit5-allurreport-example mvn clean test allure:report }
Необходимое замечание об интеграционных тестах
JUnit для UNIT тестов и цена им небольшая. Речь о применении JUnit в ИНТЕГРАЦИОННЫХ тестах. На тех проектах, где мне приходилось работать, интеграционное тестирование проводилось вручную. Можно это дело автоматизировать. Нужно обеспечить начальное состояние теста и восстановить состояние после любого исхода теста. В самом простом случае можно установить его прямо в тесте. Или, лучше, воспользоваться средствами JUnit5:
- @BeforeAll - выполняется ПЕРЕД выполнением ВСЕХ методов класса теста
- @BeforeEach - выполняется ПЕРЕД выполнением КАЖДОГО метода класса теста
- @AfterEach - выполняется ПОСЛЕ выполнением КАЖДОГО метода класса теста
- @AfterAll - выполняется ПОСЛЕ выполнением ВСЕХ методов класса теста
О warning Allure
При генерации отчета может быть получен warning от allure типа "java.lang.NoSuchMethodError when run test with Junit 5...". Для решения нужно согласовать версию allure и JUnit. Использовать allure 2.10.0. Решение для gradle:
plugins { ... id 'io.qameta.allure' version '2.10.0' // version 2.10.0 WORK! NO WARNINGS for generate allure report ... } ... dependencies { ... testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter' ... }
Работающий пример: https://github.com/cherepakhin/kotlin_in_action
Наглядно и красиво!
Прогон конкретного теста:
./gradlew test --tests '*AssumptionsTest' ./gradlew test --tests ru.perm.v.project.AssumptionsTest ./gradlew test --tests 'ru.perm.v.project.MyTestClass*' ./gradlew test --tests '*Assumptions*'
Разные варианты тестирования:
./gradlew test --tests '*SomeTest.someSpecificFeature' ./gradlew test --tests '*SomeSpecificTest' ./gradlew test --tests '*IntegTest' ./gradlew test --tests '*IntegTest*ui*' ./gradlew test --tests '*IntegTest.singleMethod'
Еще один момент - Gradle пропускает уже пройденные тесты, если код не изменился. В случае с тестирования внешнего сервися, сами тесты не меняются, а тестируюмая система может измениться. Нужно прогонять все тесты заново. Варианты решения:
./gradlew clean test ./gradlew cleanTest test ./gradlew test --rerun-tasks
Можно просто использовать "./gradlew test" для прогона ВСЕХ тестов, без учета предыдущих результатов. Для этого нужно настроить таск тестирования. На примере build.gradle.kts:
tasks.withType<Test> { .... outputs.upToDateWhen { false } // always rerun tests .... }
Пример https://github.com/cherepakhin/camel_rest_restassured_test/blob/main/build.gradle.kts/.
Пример тестирования с базой данных:
В проекте используется https://java.testcontainers.org/.
Проведение тестов :
./mvnw test