Escriba un problema de interferencia con WebFlux WebTestClient y Kotlin

Estoy construyendo un prototipo para una nueva aplicación usando Spring Webflux y Kotlin. Spring Webflux contiene un WebTestClient para testings unitarias. De acuerdo con la documentation, debería poder probar los resultados de una llamada REST como esta:

@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) } 

Sin embargo, estoy teniendo problemas de interferencia. El problema está en la combinación de 'expectBody' y 'isEqualTo'.

El error que recibo es:

Kotlin: Falló la inferencia de tipo: No hay información suficiente para inferir el parámetro T en la diversión isEqualTo (p0: Version!): T! Por favor especifíquelo explícitamente.

Los methods utilizados tienen las siguientes firmas:

 <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); } 

Lamentablemente, estoy llegando a los límites de mi conocimiento de los generics y las diferencias entre Kotlin y Java, lo que significa que no estoy seguro de cómo debo especificar esto.

Editar: como dije a continuación, se comstack cuando uso isEqualTo<Nothing>(version) . Sin embargo, esto causa una NullPointerException cuando isEqualTo finaliza sin un error. Esto parece ser porque el método 'isEqualTo' devuelve un valor, que ahora se define como el tipo 'Nothing'.

Este es un problema conocido que ya se informó en Spring JIRA como SPR-15692 y se cerró a favor de una corrección adecuada en el lado de Kotlin al que se hace reference como KT-5464 que se espera sea reparado en Kotlin 1.2 (puede votar en Kotlin issue tracker para asegúrese de que siga siendo de alta prioridad).