如何存根这样的方法给定的值,我不期待的时候,它会返回一个默认值?

例如:

Map<String, String> map = mock(Map.class);
when(map.get("abcd")).thenReturn("defg");
when(map.get("defg")).thenReturn("ghij");
when(map.get(anyString())).thenReturn("I don't know that string");

第2部分:同上,但将引发异常:

Map<String, String> map = mock(Map.class);
when(map.get("abcd")).thenReturn("defg");
when(map.get("defg")).thenReturn("ghij");
when(map.get(anyString())).thenThrow(new IllegalArgumentException("I don't know that string"));

在上面的例子中,最后的存根优先所以在地图将总是返回默认值。

有帮助吗?

解决方案

我已经发现最好的解决办法是扭转短截线的顺序:

Map<String, String> map = mock(Map.class);
when(map.get(anyString())).thenReturn("I don't know that string");
when(map.get("abcd")).thenReturn("defg");
when(map.get("defg")).thenReturn("ghij");

在默认的是抛出一个异常,你可以只使用doThrow和doReturn

doThrow(new RuntimeException()).when(map).get(anyString());
doReturn("defg").when(map).get("abcd");
doReturn("ghij").when(map).get("defg");

HTTPS:/ /static.javadoc.io/org.mockito/mockito-core/2.18.3/org/mockito/Mockito.html#12

其他提示

when(map.get(anyString())).thenAnswer(new Answer<String>() {
    public String answer(Invocation invocation) {
        String arg = (String) invocation.getArguments()[0];
        if (args.equals("abcd")
             return "defg";
        // etc.
        else
             return "default";
             // or throw new Exception()
    }
});

这是一种迂回的方式来做到这一点。但它应该工作。

您可以使用:

Map<String, String> map = mock(Map.class, new Returns("I don't know that string"));
when(map.get("abcd")).thenReturn("defg");
when(map.get("defg")).thenReturn("ghij");
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top