Я пытаюсь проверить вызов 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, тест пройден. Любая помощь с благодарностью