В этой статье будет рассмотрено, как подружить Kotest и Spring contest.
Для начала, kotest - это тестовый движок для котлина. Когда приложение написано на Spring, но есть желание использовать вместо SpringBootTest kotest, но при этом с использованием спрингового контекста, для автоматической инъекции bean-компонентов.
Spring необходимо активировать для всех тестовых классов или для каждого тестового класса. Чтобы активировать его, зарегистрируйте SpringExtension в конфигурации проекта:
@SpringBootConfiguration
@EnableAutoConfiguration
class TestConfiguration : AbstractProjectConfig() {
override fun extensions() = listOf(SpringTestExtension(SpringTestLifecycleMode.Root))
}
Если после настройки класса конфигураций Autowired поля все еще остаются незаинъекшеными, то можно явно определить пакет, в котором Spring должен искать бины: @ComponentScan("com.tuneit").
После написания класса конфигурации можно приступать к написанию самих тестов.
Пример класса тестов с использованием Kotest и Spring:
@ExtendWith(SpringExtension::class)
@SpringBootTest(classes = [TestConfiguration::class])
class EduPlatformApiClientTests : FeatureSpec() {
@Autowired
lateinit var props: ClientProperties
@Autowired
lateinit var authClient: AuthClient
init {
feature("Authorization test") {
scenario("Get token") {
val token = authClient.getJwtToken(props.clientId, props.clientPassword
)
token shouldNotBe null
}
}
}
}