所以我试图模拟一个getPremium采用单个参数的方法,PanicLevel其中一个实例是一个enum.它需要根据PanicLevel传入的内容返回不同的double值.
如果我想按枚举值执行此操作,那么像thi这样的东西应该可行.
Mockito.when(mockData.getPremium(PanicLevel.NORMAL)).thenReturn(1.1);
Run Code Online (Sandbox Code Playgroud)
但是每个枚举值需要一行.我宁愿做类似的事情:
Mockito.when(mockData.getPremium(anyPanicLevel())).thenReturn(premiums.get(passedInPanicLevel());
Run Code Online (Sandbox Code Playgroud)
显然这是无效的...但类似的东西应该......
我找到了这个,但它使用了anyString某个方法:
mockito返回值基于参数的属性
如何在不重复when每个键的情况下让Mockito执行此操作?
你可以使用Answer:
Mockito.when(mockData.getPremium(Matchers.any(PanicLevel.class)))
.thenAnswer(new Answer<Double>() {
@Override
public Double answer(InvocationOnMock arg0) throws Throwable {
PanelLevel panicLevel = (PanicLevel) arg0.getArguments()[0];
return premiums.get(panicLevel);
}
});
Run Code Online (Sandbox Code Playgroud)
仅供参考:anyString()可能只是Matchers.anyString().