Как получить доступ к переменной 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
должен быть разделен между всеми тестами, он также должен быть объявлен в объекте-компаньоне; в противном случае метод очистки должен быть в классе, а не в объекте-компаньоне.