null

Kotest в спринговом контексте

В этой статье будет рассмотрено, как подружить 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
           }
       }
   }

}