Mono.flatMap не работает во время проверки ответа с помощью MockWebServer - PullRequest
0 голосов
/ 19 ноября 2018

Выполнение 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

IЯ думаю, что причина этого поведения в том, что MockWebServer внутренне создает макеты.Что мне здесь не хватает?

1 Ответ

0 голосов
/ 21 ноября 2018

Я использую 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

...