Mockito - mocking RestOperations



我有:

Map<String, String> vars = new HashMap<String, String>();
String r = restOperations.getForObject(url, String.class, vars);

在我的测试中,我试图模拟RestOperations:

@Mock
RestOperations restOperations;
when(restOperations.getForObject(Matchers.anyString(), Matchers.eq(String.class), Matchers.notNull())).thenReturn("ok");

这永远不会被触发。

有男孩明白为什么吗?

我相信

问题出在方法重载上。 getForObject有两个重载版本,采用三个参数:

<T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables);
<T> T getForObject(String url, Class<T> responseType, Object... uriVariables);

你实际上是在嘲笑第二个,而你想嘲笑第一个。为了帮助静态方法解析显式转换notNull()匹配项,请执行以下操作:

when(restOperations.getForObject(
  Matchers.anyString(), Matchers.eq(String.class), (Map)Matchers.notNull())
).thenReturn("ok");

或者更好的是,使用 anyMap()

 when(restOperations.getForObject(
   Matchers.anyString(), Matchers.eq(String.class), Matchers.anyMap())
 ).thenReturn("ok");

感谢您的回答,这真的很有帮助。

以下是完整的源代码,认为对其他人有帮助。

public class HandlerTest {
    private Handler handler;
    @Before
    public void setUp() {
        handler = new HandlerImpl();
    }
    @Test
    public void testMethodtoTest() {
        String param1 = "123456";
        String param2 = "3736272";
        String param3 = "838912";
        RestTemplate mock = Mockito.mock(RestTemplate.class);
        Mockito.when(mock.getForObject( Matchers.anyString(), Matchers.eq(String.class), Matchers.anyMapOf(String.class, String.class)) ).thenReturn("ok");
        handler.setRestTemplate(mock);
        String actualResponse = handler.MethodtoTest(param1, param2, param3);
        Assert.assertNotNull(actualResponse);
        Assert.assertEquals("ok",actualResponse);
}

相关内容

  • 没有找到相关文章

最新更新