在Mockito中存储默认值
问题描述:
如何存储一个方法,以便在给定值时我不期待它返回一个默认值?在Mockito中存储默认值
例如:
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");
http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#doReturn%28java.lang.Object%29
+1
感谢您的详细解答,包括'doReturn()'。 (除了一致性,在这种情况下'doThrow()'是不必要的。) – David 2015-09-01 17:23:05
答
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");
问题是? – Bozho 2010-11-18 15:22:17