如何在 kotlin 的 Spring Boot 测试中从伴随对象访问 lateinit 变量?
How to access lateinit variable from companion object in SprintBoot test in kotlin?
我有一个测试 class 如下所示:
@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
}
}
如何从 cleanupAll
方法访问 userRepository
?
我试过:
companion object {
@JvmStatic
@AfterClass
@Throws(Exception::class)
fun cleanupAll() {
UserControllerTest().userRepository.deleteAll()
}
}
它给出错误:
kotlin.UninitializedPropertyAccessException: lateinit property userRepository has not been initialized
这个问题其实和lateinit
没有关系。
您的 cleanupAll
创建了一个 new UserControllerTest
。所以它不会对测试中使用的 UserRepository
做任何事情,即使它有效。
对于这种特定情况,如果一个 userRepository
应该在所有测试之间共享,它也应该在伴随对象中声明;如果不应该,那么清理方法应该在 class 中,而不是伴随对象中。
我有一个测试 class 如下所示:
@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
}
}
如何从 cleanupAll
方法访问 userRepository
?
我试过:
companion object {
@JvmStatic
@AfterClass
@Throws(Exception::class)
fun cleanupAll() {
UserControllerTest().userRepository.deleteAll()
}
}
它给出错误:
kotlin.UninitializedPropertyAccessException: lateinit property userRepository has not been initialized
这个问题其实和lateinit
没有关系。
您的 cleanupAll
创建了一个 new UserControllerTest
。所以它不会对测试中使用的 UserRepository
做任何事情,即使它有效。
对于这种特定情况,如果一个 userRepository
应该在所有测试之间共享,它也应该在伴随对象中声明;如果不应该,那么清理方法应该在 class 中,而不是伴随对象中。