使用WebFlux WebTestClient和Kotlin输入干扰问题

我正在使用Spring Webflux和Kotlin构建一个新应用程序的原型。 Spring Webflux包含一个用于单元测试的WebTestClient。 根据文档,我应该能够测试像这样的REST调用的结果:

@Test fun getVersion_SingleResult_ContentTypeJson_StatusCodeOk_ContentEqualsVersion() { //given var version = Version("Test", "1.0") val handler = ApiHandler(version!!) val client = WebTestClient.bindToRouterFunction(ApiRoutes(handler).apiRouter()).build() //expect val response = client.get().uri("/api/version/").exchange() response.expectStatus().isOk response.expectHeader().contentType(MediaType.APPLICATION_JSON_UTF8) response.expectBody(Version::class.java).isEqualTo(version) } 

但是,我遇到了一些类型的干扰问题。 问题在于“expectBody”和“isEqualTo”的结合。

我得到的错误是:

Kotlin:类型推断失败:没有足够的信息来推断fun inEqualTo(p0:Version!)中的参数T:T! 请明确指定。

使用的方法有以下签名:

 <B> WebTestClient.BodySpec<B, ?> expectBody(Class<B> var1); public interface BodySpec<B, S extends WebTestClient.BodySpec<B, S>> { <T extends S> T isEqualTo(B var1); } 

可悲的是,我遇到了泛型和Kotlin和Java之间的区别,这意味着我不知道该如何指定它。

编辑:就像我下面说的,它编译时,我使用isEqualTo<Nothing>(version) 。 但是,当isEqualTo无故障结束时,会导致NullPointerException。 这似乎是因为'isEqualTo'方法返回一个现在被定义为'Nothing'类型的值。

这是一个已知的问题,已经在Spring JIRA上报告为SPR-15692,并且关闭了Kotlin侧的一个适当的修补程序,引用KT-5464 ,这个修复程序预计将在Kotlin 1.2中修复(您可以在Kotlin问题跟踪程序上为它投票)确保它仍然是高优先级)。