Проблема с помехами в 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: Ошибка ввода типа: недостаточно информации для вывода параметра T в fun isEqualTo (p0: Version!): 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) . Однако это вызывает исключение NullPointerException, когда isEqualTo заканчивается без сбоя. Это похоже на то, что метод isEqualTo возвращает значение, которое теперь определяется как тип «Nothing».

Это известная проблема, о которой уже сообщалось в Spring JIRA как SPR-15692, и закрыта в пользу правильного исправления на стороне Котлина, на которую ссылается KT-5464, как ожидается, будет исправлена ​​в Kotlin 1.2 (вы можете проголосовать за нее на трекер Kotlin, чтобы убедитесь, что он остается высоким приоритетом).

Intereting Posts
Является ли * arrayOf () инструкцией? Kotlin не может идентифицировать параметры, если явно не указано Как отладить «ошибку SQL (запрос) или отсутствующую базу данных» в приложении для Android? Observable.just (), который возвращает Единицу в Котлин Как передать vararg как массив для работы в Kotlin? Генериры Котлина Массив <T> приводит к «Невозможно использовать T как параметр типа reified. Вместо этого используйте класс, но List <T> не делает Неожиданные жетоны (используйте, чтобы разделить выражения в одной строке) Второй экземпляр приложения создается с Android 7.0. Как я могу избежать этого? Получить N последних объектов, испускаемых наблюдаемыми в RxJava2 Kotlin – Как сделать поле только для чтения для внешних классов Запросы Firebase никогда не заканчиваются на Android Почему универсальное типизированное свойство обнуляется? Хранить лямбда в переменной в котлин Циркулярные ссылки с vals в Котлине Как вызвать метод ArrayAdapter.addAll в Котлине?