Мы вызываем контроллер через веб-тест клиента. У меня есть 2 внешних вызова API в моем классе обслуживания. Теперь я хочу написать тестовые случаи для этих сценариев ios. Пожалуйста, предложите мне, как смоделировать эти внешние сервисные вызовы, используя фиктивный веб-сервер.
Я пробовал, как показано ниже, но он вызывает реальные внешние вызовы.
@RunWith(SpringRunner.class)
@WebFluxTest
@ContextConfiguration(classes = { TestConfig.class })
public class FunctionalTest {
@Autowired
public MockWebServer mockWebServer;
@Autowired
private WebTestClient webTestClient;
@Autowired
private ApplicationContext context;
@Before
public void setUp() {
this.webTestClient = WebTestClient.bindToApplicationContext(this.context).configureClient() //
.baseUrl("http://localhost:2020")
.exchangeStrategies(ExchangeStrategies.builder().codecs((configurer) -> {
configurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(objectMapper));
configurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(objectMapper));
}).build()).build();
MockitoAnnotations.initMocks(this);
}
@Test
public void testMyInfo() throws Exception {
MockResponse businessResponse = new MockResponse().setResponseCode(200)
.setHeader(HttpHeaders.CONTENT_TYPE,
MediaType.APPLICATION_JSON_VALUE).setBody(getRequestDataFromFile("business.json"));
MockResponse cheapResponse = new MockResponse().setResponseCode(200)
.setHeader(HttpHeaders.CONTENT_TYPE,
MediaType.APPLICATION_JSON_VALUE).setBody(getRequestDataFromFile("cheap.json"));
mockWebServer.setDispatcher(new Dispatcher() {
@Override
public MockResponse dispatch(RecordedRequest request) {
if (request.getPath().endsWith("/business"))
return businessResponse;
if (request.getPath().endsWith("/cheap")) {
return cheapResponse;
}
return cheapResponse;
}
});
testResponse(webTestClient);
}
public void testResponse(final WebTestClient webTestClient) {
((WebTestClient.RequestBodySpec)
webTestClient.get().uri("/webflux")).exchange().expectStatus().isEqualTo(200)
.expectBody(Data[].class).consumeWith(result -> {
System.out.println("result........." + result);
});
}