我有一个如下测试类:
@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
答案 0 :(得分:2)
问题实际上与std::map
无关。
您的lateinit
创建了新 cleanupAll
。因此,即使它有效,它也不会对测试中使用的UserControllerTest
做任何事情。
对于这种特定情况,如果在所有测试之间共享一个UserRepository
,它也应该在伴随对象中声明;如果它不应该,那么清理方法应该在类中,而不是伴随对象。