Как написать mockito junit для метода обмена Resttemplate

Как написать mockito junit для метода ниже:

@Autowired
RestTemplate restTemplate;

ResponseEntity<?> execute(final String url, HttpMethod httpMethod,
                          HttpEntity<?> entityRequest,
                          String.class, 
                          Map<String, String> urlVariables){
    restTemplate.exchange(url, httpMethod, entityRequest, responseType, urlVariables);
}

Пожалуйста, помогите мне, как писать.

Ответ 1

@RunWith(MockitoJUnitRunner.class)
public class ToTestTest {

  @InjectMocks
  private YourClass toTest;

  @Mock
  private RestTemplate template;

  @Test
  public void test() {
    toTest.execute(Mockito.anyString(), Mockito.any(), Mockito.any(), 
                   Mockito.any(), Mockito.any());

    Mockito.verify(template, Mockito.times(1))
                    .exchange(Mockito.anyString(),
                                    Mockito.<HttpMethod> any(),
                                    Mockito.<HttpEntity<?>> any(),
                                    Mockito.<Class<?>> any(),
                                    Mockito.<String, String> anyMap());
    }
 }

Ответ 2

Я думаю, что наиболее удобный и подходящий подход в этом случае (который является тестированием REST на стороне клиента с использованием RestTemplate) будет MockRestServiceServer предоставленный Spring Тестирование.

Ответ 3

Это зависит от того, что вы хотите.

Один способ использования mocks - упростить вызов метода execute. Для этого вы можете использовать измененные версии фактических параметров, таких как HttpMethod и HttpEntity. Если базовый метод exchange требует определенного поведения из этих параметров, вам может понадобиться заглушить его с помощью методов mockito when... thenReturn.

Как только эти издеваемые параметры настроены так, что вы можете вызвать свои методы execute, вам нужно будет проверить, что его результат верен.

Для проверки возвращаемого значения вы можете использовать традиционные утверждения JUnit.

Кроме того, вы можете проверить, действительно ли имели место определенные взаимодействия с обманутыми объектами. Для этого вы можете использовать методы mockito verify, чтобы проверить, например, что на самом деле вызывается метод HttpEntity.

Технически вы также можете проверить, вызван ли метод остального шаблона exchange. Для этого вам нужно будет высмеять RestTemplate и ввести макет в тестируемый вами класс. Затем вы можете использовать mockito verfiy, чтобы проверить, что exchange вызывается соответствующим образом. Обычно это разумная вещь, особенно если есть много методов для тестирования в вашем классе. Для существующего метода execute он кажется немного переборшим.