Как получить доступ к переменной lateinit из объекта-компаньона в тесте SprintBoot в kotlin?

У меня есть тестовый класс, как показано ниже:

@RunWith(SpringJUnit4ClassRunner::class)
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT)
class UserControllerTest{
    @Qualifier("userRepository")
    @Autowired
    private lateinit var userRepository: UserRepository

    companion object {
        @JvmStatic
        @AfterClass
        @Throws(Exception::class)
        fun cleanupAll() {
        }
    }

    @Test
    @Throws(Exception::class)
    fun testUserShouldBeCreated() {
//        Some Test
    }
}

Как я могу получить доступ userRepository от cleanupAll метод?

Я пытался с:

companion object {
    @JvmStatic
    @AfterClass
    @Throws(Exception::class)
    fun cleanupAll() {
        UserControllerTest().userRepository.deleteAll()
    }
}

Это дает ошибку:

kotlin.UninitializedPropertyAccessException: lateinit property userRepository has not been initialized

1 ответ

Проблема на самом деле не имеет ничего общего с lateinit,

Ваш cleanupAll создает новый UserControllerTest, Так что это ничего не сделает с UserRepository используется в тесте, даже если это сработало.

Для этого конкретного случая, если один userRepository должен быть разделен между всеми тестами, он также должен быть объявлен в объекте-компаньоне; в противном случае метод очистки должен быть в классе, а не в объекте-компаньоне.

Другие вопросы по тегам