Mono.flatMap не работает во время проверки ответа с помощью MockWebServer
Делая HTTP-вызов с использованием WebClient, из вывода Mono я хочу сделать некоторую логику, для которой я использую метод flatMap.
Mono<Response> authResponseMono = webClient.post().syncBody(requestBody)
.retrieve()
.bodyToMono(Response.class);
return authResponseMono.flatMap(authResponse -> {
//code removed for brevity
});
Использование библиотеки OkHttp MockWebServer для проверки ответа и модульного тестирования функциональности. flatMap
Метод не вызывается при использовании MockWebServer, однако на реальных вызовах все работает нормально.
Ниже приведен фрагмент, используемый для макета ответа HTTP
server.enqueue(mockResponse); //server is instance of MockWebServer
Optional<Response> optionalResponse = authClientService.verifyToken().block(); //verifyToken returns authResponseMono
Я думаю, что причина этого поведения заключается в том, что MockWebServer внутренне создает макеты. Что мне здесь не хватает?
1 ответ
Я использую MockWebServer и webClient, и это, кажется, хорошо. Может быть, вы можете опубликовать более подробно.
вот фрагмент моей настройки - обратите внимание, это не весенний тест
@RunWith(MockitoJUnitRunner.class)
public class AccountDetailsRetrievalTest {
private static final String ACCOUNT_DETAILS_PATH = "/AccountDetailsPath";
private MockWebServer server;
private WebClient webClient;
private AccountDetailsRetrieval accountDetailsRetrieval;
@Before
public void setup() {
this.server = new MockWebServer();
this.webClient = WebClient.create(this.server.url(ACCOUNT_DETAILS_PATH).toString());
accountDetailsRetrieval = new AccountDetailsRetrieval(this.webClient, ACCOUNT_DETAILS_PATH, 300);
}
@After
public void shutdown() throws Exception {
this.server.shutdown();
}
@Test
public void nameHasBeenChanged() {
String content = "{\"bar\":\"bar1\",\"foo\":\"foo1\"}";
MockResponse response1 = new MockResponse()
.setHeader("Content-Type", "application/json")
.setBody(content);
this.server.enqueue(response1);
StepVerifier.create(accountDetailsRetrieval.getAccountData(new AccountDetails("001", "ABC")))
.assertNext(response -> {
assertThat(response).isNotNull();
assertThat(response.getHttpStatus()).isEqualByComparingTo(HttpStatus.OK);
assertThat(response.data().get("bar")).isEqualTo("bar1");
assertThat(response.data().get("foo")).isEqualTo("foo1");
})
.verifyComplete();
}
Ответ здесь - просто оболочка для JsonNode