Я хочу смоделировать внешний API, который я называю частью моего сервиса.Поэтому я хотел использовать MockWebServer
от okhttp3.Моя проблема в том, что вызов bodyToMono
работает нормально, если я хочу получить тело в виде строки, но не работает при извлечении его в качестве класса данных.Я попытался обрезать его, используя следующий фрагмент кода:
public class MockWebClientTest {
private MockWebServer server;
@BeforeEach
public void setUp() throws IOException {
server = new MockWebServer();
server.start(9876);
}
@AfterEach
public void tearDown() throws IOException {
server.shutdown();
}
@Test
public void stringWorks() throws JsonProcessingException {
createMockedTokenCall();
Mono<String> response = WebClient.create(this.server.url("/").toString())
.get()
.uri("/")
.retrieve()
.bodyToMono(String.class);
System.out.println(response.block());
}
@Test
public void classDoesNotWork() {
createMockedTokenCall();
Mono<AuthToken> response = WebClient.create(this.server.url("/").toString())
.get()
.uri("/")
.retrieve()
.bodyToMono(AuthToken.class);
System.out.println(response.block());
}
private void createMockedTokenCall() {
server.enqueue(new MockResponse().setBody("{\"accessToken\":\"BARBAR\",\"refreshToken\":\"FOOFOO\"}"));
}
}
class AuthToken {
private String accessToken;
private String refreshToken;
//constructor
}
Первый тест (stringWorks
) работает нормально и возвращает правильное представление json.Однако второй тест (classDoesNotWork
) навсегда зависает при вызове bodyToMono
.
Я предполагаю, что это не имеет никакого отношения к библиотеке okttp3 напрямую, поскольку у меня была та же ошибка при использовании Wiremock.Однако тот же код работает при нацеливании на конечную точку реального API.К сожалению, я не смог найти другой способ проверить свои звонки, используя WebClient
, так как Spring в настоящее время не поддерживает его напрямую (см. SPR-15286 ).
Я действительно с нетерпением ждучтобы помочь в этом вопросе!Заранее спасибо!
Общее замечание: По сути, это более или менее копия контрольного примера shouldReceiveJsonAsPojo
в https://github.com/spring-projects/spring-framework/blob/master/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/WebClientIntegrationTests.java