簡體   English   中英

如何讓Mockito根據枚舉返回不同的值?

[英]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),然后對其進行迭代以實現此目的。

Mockito:如何匹配任何枚舉參數

看起來您將需要使用Matchers.any(Class)

Mockito.when(mockData.getPremium(Matchers.any(PanicLevel.class)).thenReturn(premiums.get(passedInPanicLevel());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM