【问题标题】:"lateinit property <varName> has not been initialized" when using WebTestClient with SpringBootTest on Kotlin在 Kotlin 上将 WebTestClient 与 SpringBootTest 一起使用时,“lateinit 属性 <varName> 尚未初始化”
【发布时间】:2019-10-07 13:55:36
【问题描述】:

我不知道在使用 Kotlin 和 Spring Boot 测试时如何初始化 WebTestClient

@ExtendWith(SpringExtension::class, MockKExtension::class)
@AutoConfigureWebTestClient
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class GraphQlClientIntegrationTest {
    private val testToken = "aUna%14OkmUZunb528342"

    @Autowired
    lateinit var client: WebTestClient

    @InjectMockKs
    lateinit var gateGraphQlClient: GateGraphQlClient

    @Test
    fun shouldAddAuthorization() {
        val ID = Id(UUID.randomUUID().toString())
        val returnResult = client.post()
                .uri("/graphql")
                .header(HttpHeaders.AUTHORIZATION, testToken)
                .exchange()
                .expectStatus().isOk
                .returnResult(ObjectNode::class.java)
    }
}

这是错误信息

lateinit property client has not been initialized
kotlin.UninitializedPropertyAccessException: lateinit property client has not been initialized

【问题讨论】:

    标签: spring rest testing kotlin


    【解决方案1】:

    尝试构造函数注入。因为 lateinit 会延迟初始化对象。所以当你调用方法时它会给出null 值,所以它会抛出UninitializedPropertyAccessException

    class GraphQlClientIntegrationTest(val client: WebTestClient,
                                       val gateGraphQlClient: GateGraphQlClient) {
        private val testToken = "aUna%14OkmUZunb528342"
        // Your Code
    }
    

    【讨论】:

    • 这真的有效吗?我得到:“测试类应该只有一个公共零参数构造函数”(使用 Kotlin 1.4.10)
    猜你喜欢
    • 2020-04-14
    • 1970-01-01
    • 2022-11-22
    • 2021-10-13
    • 2022-07-05
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多