Член @Autowired не инициализирован в тесте Junit 5, написанном на Kotlin

Я не могу инициализировать член @Autowired в тесте JUnit 5. Вот тест:

import org.amshove.kluent.`should be equal to`
import org.junit.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.context.TestConfiguration
import org.springframework.context.annotation.Bean

@SpringBootTest
class SnackQueryResolverTest {
    @TestConfiguration
    class SnackQueryResolverTestConfig {
        @Bean
        fun snackQueryResolverFactory() = SnackQueryResolver()
    }

    @Autowired
    private lateinit var snackQueryResolver: SnackQueryResolver

    @Test
    fun `snacks`() {
        val snacks = snackQueryResolver.snacks()
        snacks.size `should be equal to` 5
    }
}

При запуске теста я получаю сообщение об ошибке:

kotlin.UninitializedPropertyAccessException: lateinit property snackQueryResolver has not been initialized

Если я удалю @Autowired и создаю экземпляр bean-компонента во время построения, тест пройдет нормально:

@SpringBootTest
class SnackQueryResolverTest {
    private val snackQueryResolver: SnackQueryResolver = SnackQueryResolver()

    @Test
    fun `snacks`() {
        val snacks = snackQueryResolver.snacks()
        snacks.size `should be equal to` 5
    }
}

Что мне не хватает?


person Ken    schedule 10.01.2020    source источник


Ответы (1)


Оказывается, проблема была вызвана небольшой ошибкой - небрежное завершение кода IDE. Для @Test я импортировал:

import org.junit.Test

вместо этого это нужно использовать для тестов JUnit 5:

import org.junit.jupiter.api.Test
person Ken    schedule 10.01.2020
comment
Спасибо! Я совершил ту же ошибку и вырывал волосы! - person Peter Alfvin; 23.09.2020