模拟RestTemplate getForObject

时间:2019-03-03 17:54:42

标签: java unit-testing 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);

服务方法获取“用户名”作为输入,并传递给getForObject方法。

在我的测试方法中,我有模拟休息模板。

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 个答案:

答案 0 :(得分:0)

尝试使用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));


}