Как написать 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
он кажется немного переборшим.