所以我试图模拟一个方法getPremium
,它接受一个参数,PanicLevel
的实例是enum
。它需要返回一个不同的double值,具体取决于传入的PanicLevel
。
如果我想按照enum值执行此操作,那么这样的东西应该可以工作。
Mockito.when(mockData.getPremium(PanicLevel.NORMAL)).thenReturn(1.1);
但是每个枚举值需要一行。我宁愿做类似的事情:
Mockito.when(mockData.getPremium(anyPanicLevel())).thenReturn(premiums.get(passedInPanicLevel());
显然这不是有效的......但类似的东西应该是....
我发现了这个,但是它从某个地方使用方法anyString
:
mockito return value based on property of a parameter
如果不对每个密钥重复when
,我如何让Mockito执行此操作?
答案 0 :(得分:5)
您可以使用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);
}
});
仅供参考:anyString()
可能只是Matchers.anyString()
。
答案 1 :(得分:0)
输出取决于PanicLevel枚举值。然后我们需要模拟测试用例所需的所有值。我认为还有其他办法。您可以使用Properties(enumValue,ouput)然后迭代它们来实现此目的。
答案 2 :(得分:-1)
Mockito: How to match any enum parameter
看起来你需要使用Matchers.any(Class)
Mockito.when(mockData.getPremium(Matchers.any(PanicLevel.class)).thenReturn(premiums.get(passedInPanicLevel());