Как смоделировать вызовы сервиса внешнего API с помощью mockwebserver? Я звоню своему контроллеру через веб-клиент - PullRequest
0 голосов
/ 20 февраля 2020

Мы вызываем контроллер через веб-тест клиента. У меня есть 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);

            });
}
...