Издевательский сервис третьих лиц - PullRequest
0 голосов
/ 15 марта 2019

Как издеваться над сторонней службой, не вызывая ее?Я написал модульный тестовый пример для контроллера остальных для метода post.Но вместо того, чтобы издеваться над сервисом, он фактически вызывает сервис.Любые решения?

Ответы [ 3 ]

0 голосов
/ 15 марта 2019

У вас есть несколько альтернатив:

(1) Используйте шаблон адаптера , чтобы отделить логику вашего приложения от вызовов стороннего API. В ваших юнит-тестах вы должны издеваться над адаптером. См. эту статью для более подробной информации об этом шаблоне. Недостатком является то, что сам адаптер остается трудно тестируемым.

(2) Некоторые API, такие как Stripe , предоставляют тестовый режим, который можно использовать для тестирования.

(3) Используйте unmock . Библиотека захватывает вызовы API и возвращает надежные фиктивные данные. Вы также можете использовать его для тестирования ошибок сервера («нестабильный режим») и выполнения стохастического тестирования.

Обратите внимание, что я один из немокеров.

0 голосов
/ 16 марта 2019

Вот пример использования Mockito:

@Test
public void shouldReturnSituation() throws IOException {

    ResponseEntity<String> response = new ResponseEntity<String>(BIGDATA_RESPONSE, HttpStatus.OK);

    mockRestTemplateResponse(response);

    Object actualSituation = resolver.resolve(baseDto);

    assertEquals("REGULAR", actualSituation);

    verify(restTemplate).exchange(requestEntityCaptor.capture(), eq(String.class));

    assertEquals("http://example.com/any/01234567890", requestEntityCaptor.getValue().getUrl().toString());
}

А ниже приведен еще один пример:

@Test
public void shouldReturnFalseWhenNotFound() throws IOException {

    HttpClientErrorException exception = new HttpClientErrorException(HttpStatus.NOT_FOUND);

    doThrow(exception).when(restTemplate).exchange(any(RequestEntity.class), eq(String.class));

    Object result = resolver.resolve(baseDto);

    assertFalse((Boolean) result);
}
0 голосов
/ 15 марта 2019

Существует несколько способов, которыми вы можете смоделировать звонок в стороннюю службу.

  1. Использование внедрения зависимостей для создания тестовой версии вызова сторонней службы.

Guice, Spring и т. Д. Позволят вам внедрить зависимости, которые будут имитировать поведение вашей сторонней службы.

  1. Использование фреймворков Mockito / Powermock и др.

Предполагая, что у вас есть Объект, который контролирует доступ к сторонней службе, вы можете использовать Mockito и другие платформы для перехвата вызовов к Объекту и возврата конкретных результатов, не связываясь со сторонней службой.

Вот пример обращения к базе данных https://examples.javacodegeeks.com/core-java/mockito/mockito-mock-database-connection-example/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...