![](/img/trans.png)
[英]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.