Как написать Mockito для Rest template 2, основанный на ответе RestTemplate 1 - PullRequest
0 голосов
/ 19 июня 2020
 @Test
    public void getEventsByOrg() throws Exception {

        String mockResposne = getXMLFromFile("classpath:OrgResponse.xml");
        ResponseEntity<String> response = new ResponseEntity<>(mockResposne, HttpStatus.OK);
        when(restTemplate.exchange(any(String.class), any(), any(HttpEntity.class), any(Class.class)))
                .thenReturn(response);

        ResponseEntity<List<OCVEvents>> ocvEvents = eventService.getEventsByGlobalKey(eventIdOrg, traceId);
        verify(restTemplate).exchange(any(String.class), any(), captor.capture(), any(Class.class));

        Events event = ocvEvents.getBody().get(0);
        Events eventsPerson = new ObjectMapper().readValue(ResourceUtils.getFile("classpath:EventOrg.json"), Events.class);
        assertThat(event.getHeader()).isEqualTo(eventsPerson.getHeader());

Теперь у меня есть еще один вызов Rest внутри eventsService Как написать модульный тест для этого

Мне нужно нажать Rest API (1) и получить ответ, в зависимости от ответа, мне нужно нажать другой Rest API (2) мне нужно написать mockit0 для этого класса

1 Ответ

0 голосов
/ 19 июня 2020

Если у вас есть несколько вызовов rest api, выполняемых в вашем классе обслуживания, вам придется имитировать все вызовы api, чтобы вернуть фиктивные данные для запуска вашего теста. Так же, как вы имитировали ответ на первый вызов API, добавьте фиктивный ответ для второго вызова API перед вызовом своей службы в тесте. Вместо использования any() в качестве сопоставителя аргументов укажите конкретный URL-адрес, который вы собираетесь вызывать из кода, чтобы различать два макета вызова api.

Если вы используете Springboot и используете spring-boot-test для Интеграционное тестирование, тогда вы можете использовать TestRestTemplate например:

TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity<String> response = testRestTemplate.
  getForEntity(FOO_RESOURCE_URL + "/1", String.class);

assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

или Если у вас просто есть тестовый пример Unit с использованием Mockito, например, тогда:

@Mock
private RestTemplate restTemplate;

@InjectMocks
private EventService eventService = new EventService();

@Test
public void givenMockingIsDoneByMockito_whenGetIsCalled_shouldReturnMockedObject() {
    SomeObject instance = new SomeObject(“E001”, "Eric Simmons");
    Mockito
      .when(restTemplate.getForEntity(
        “http://localhost:8080/test/E001”, SomeObject.class))
      .thenReturn(new ResponseEntity(instance, HttpStatus.OK));

    SomeObject returnedObject = eventService.getEventsByGlobalKey(id);
    Assert.assertEquals(instance, returnedObject);
}
...