Макет RestTemplate getForObject

#java #unit-testing #junit #mockito #resttemplate

#java #модульное тестирование #junit #mockito #resttemplate

Вопрос:

У меня возникли трудности с издевательством над методом RestTemplate.getForObject. Определение метода является

 public <T> T getForObject(String url, Class<T> responseType, Object... uriVariables) throws RestClientException
  

Я использую этот метод в своем классе обслуживания следующим образом.

     User user = restTemplate.getForObject("https://api.github.com/users/{username}", 
                User.class, username);
  

Метод Service получает «username» в качестве входных данных, которые я передаю методу getForObject.

В моем методе тестирования у меня есть макет шаблона Rest.

 doAnswer(new Answer<User>() {
            @Override
            public User answer(InvocationOnMock invocationOnMock) throws Throwable {
                User user = new User();
                user.setLogin("ghtvnath");
                user.setName("Tharindu Vishwanath");
                return user;
            }
        }).when(restTemplate).getForObject(anyString(),
                eq(User.class), anyString());
  

Но по какой-то причине этот макет не работает.

Ответ №1:

Попробуйте использовать MockRestServiceServer вместо того, чтобы издеваться над интерфейсом RestTemplate.

 private MockRestServiceServer mockServer;

@Before
public void setUp() {
    mockServer = createServer(restTemplate);
}


@Test
public void testSomething(){
        mockServer.expect(anything()).andRespond(withSuccess("{login":"ghtvnath""}", MediaType.APPLICATION_JSON));


}