如何在kotlin中的SprintBoot测试中从伴随对象访问lateinit变量?

时间:2018-04-14 20:33:47

标签: spring-boot testing kotlin spring-boot-test

我有一个如下测试类:

@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 个答案:

答案 0 :(得分:2)

问题实际上与std::map无关。

您的lateinit创建了 cleanupAll。因此,即使它有效,它也不会对测试中使用的UserControllerTest做任何事情。

对于这种特定情况,如果在所有测试之间共享一个UserRepository,它也应该在伴随对象中声明;如果它不应该,那么清理方法应该在类中,而不是伴随对象。