【问题标题】:How to access lateinit variable from companion object in SprintBoot test in kotlin?如何在 Kotlin 的 Spring Boot 测试中从伴随对象访问 lateinit 变量?
【发布时间】:2018-04-14 20:33:46
【问题描述】:

我有一个如下的测试类:

@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

【问题讨论】:

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


    【解决方案1】:

    问题其实与lateinit无关。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-31
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 2019-06-02
      • 2016-05-21
      相关资源
      最近更新 更多