[英]How do I compare the value of an Enum with all possible values of the Enum in an Enum method and avoid missing return statement?
[英]How do I get Mockito to return different values based on an enum?
因此,我试图模拟一个采用单个参数的PanicLevel
方法,该方法是getPremium
一个实例,该实例是一个enum
。 它需要根据传入的PanicLevel
返回不同的double值。
如果我想按枚举值执行此操作,则应使用thi之类的方法。
Mockito.when(mockData.getPremium(PanicLevel.NORMAL)).thenReturn(1.1);
但这需要每个枚举值一行。 我宁愿做这样的事情:
Mockito.when(mockData.getPremium(anyPanicLevel())).thenReturn(premiums.get(passedInPanicLevel());
显然这是无效的...但是类似的事情应该是...
我发现了它,但是它从某处使用了方法anyString
: 基于参数属性的 anyString
返回值
如何让Mockito做到这一点,而不必为每个键重复when
?
您可以使用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()
可能只是anyString()
Matchers.anyString()
。
输出取决于PanicLevel枚举值。 然后,我们需要模拟测试用例所需的所有值。 我认为没有其他方法可以这样做。 您可以具有Properties(enumValue,ouput),然后对其进行迭代以实现此目的。
看起来您将需要使用Matchers.any(Class)
Mockito.when(mockData.getPremium(Matchers.any(PanicLevel.class)).thenReturn(premiums.get(passedInPanicLevel());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.