Задача организовать удобное UNIT и интеграционное тестирование.
Пример проекта с gradle https://github.com/cherepakhin/vacancy_backend
Зачем? Интеграционные тесты должны быть отделены от unit тестов, т.к. нет смысла проводить интеграционное тестирование, если unit тесты упали (аксиома, но оказывается, это нужно говорить). Кратко:
В build.gradle.kts (пример) добавить:
tasks.withType {
useJUnitPlatform()
// Show test log
testLogging {
// events("standardOut", "started", "passed", "skipped", "failed")
events("passed", "skipped", "failed")
}
// for run Integration test: ./gradlew test -Dtest.profile=integration
if (System.getProperty("test.profile") != "integration") {
exclude("**/*IntegrationTest*")
}
}
При этом Unit тесты запускаются, как обычно (интеграционные тесты будут пропущены):
./gradlew test
Для прогона интеграционных тестов выполнить:
./gradlew test -Dtest.profile=integration
Для тестированмя сервисов, работающих с базой данных, использовать DBUnit ( https://www.dbunit.org/, Introduction to DBUnit (Baeldung), Database unit testing with DBUnit, Spring and TestNG (DZone), )
Ссылки:
Интеграционное тестирование с JUnit, RestAssured, Cucumber
Интеграционное тестирование с JUnit
@Before @After в тестах
Простой проект на Kotlin и Spring Boot
BDDMockito - возможности в форме, более подходящей для BDD
Quick Guide to BDDMockito (Baeldung)
Testcontainers: тестирование с реальными зависимостями (habr)