Вы здесь:

Предупреждение: я знаю, что 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