Тестирование запросов Spring WebClient с параметрами - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь проверить вызов Spring WebClient с помощью MockWebServer

У меня есть следующая служба, которую я хочу проверить

TestService.java

public class TestService {

private final ApplicationProperties props;

private final WebClient webClient;

public TestService(ApplicationProperties props, WebClient webClient) {
    this.props = props;
    this.webClient = webClient;
}

public String postToService(String body, String param1, String param2) {
    return webClient.post()
                .uri(uriBuilder -> uriBuilder
                        .scheme("http")
                        .host("localhost")
                        .port("8080")
                        .path("/api/cust/{param1}/bill/{param2}/documents")
                        .build(param1, param2))
//                .uri("fakeurl")
            .body(BodyInserters.fromObject(body))
            .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
            .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
            .retrieve()
            .bodyToMono(String.class)
            .block();
}
}

У меня есть следующий класс теста

TestClass.java

class TestClass {

private static final MockWebServer MOCK_SERVER = new MockWebServer();

private final ApplicationProperties props = mock(ApplicationProperties.class);

private final WebClient webClient = WebClient.create(MOCK_SERVER.url("/").toString());

private final TestService testService = new TestService(props, webClient);

@Test
void test() {
    String responseBody = "testResponse";
    MOCK_SERVER.enqueue(new MockResponse().setResponseCode(200)
            .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
            .setBody(responseBody));
    String testServiceResponse = testService.postToService("somestring","somestring","somestring");
    assertEquals(responseBody, testServiceResponse);
}

@AfterAll()
static void tearDown() throws IOException {
   MOCK_SERVER.shutdown();
}
}

При запуске теста я получаю следующую ошибку org.springframework.web.reactive.function.client.WebClientResponseException$NotFound: 404 Not Found

Если я раскомментирую ссылку .uri("fakeurl") в классе TestService и закомментирую предыдущий вызов .uri() с помощью uriBuilder, тест пройден. Любая помощь с благодарностью

...