[英]Specify specific enum being passed into method in Mockito doReturn method
我有一個junit測試,我在一個類中有一個對象被模擬。 讓我們用名為mocker
的@Mock of MyManager來調用Mocker
類。
示例類:
public class Mocker {
private MyManager myManager;
public void myMethod() {
String x = "test";
final String result1 = this.myManager.execute(dummyEnum.ENUM_A, x);
final String result2 = this.myManager.execute(dummyEnum.ENUM_B, x);
if(result1 == true) {
//Do something
}
if(result2 == true) {
//Do something else
}
}
public enum dummyEnum {
ENUM_A,ENUM_B
}
}
我當前的junit測試使用以下內容: doReturn(null).when(mocker).execute(any(dummyEnum.class), anyObject());
但是,這將為result1和result2返回null。 如何指定當使用ENUM_A執行execute()時它返回一個Hello
的字符串和帶有ENUM_B的execute()返回一個Goodbye
字符串
使用Matchers類的eq()
方法(代表equals)。
Mockito.doReturn("Hello").when(mock).execute(Matchers.eq(dummyEnum.ENUM_A), anyObject());
Mockito.doReturn("Goodbye").when(mock).execute(Matchers.eq(dummyEnum.ENUM_B), anyObject());
我在這里看到了答案,但我不想只說出該類的任何實例,我想從該類中指定某個枚舉。
在你的情況下,只需傳遞枚舉實例:
import static org.mockito.Mockito.*;
...
Mockito.doReturn(null).when(mocker).execute(eq(DummyEnum.ENUM_A), any());
Mockito.doReturn(null).when(mocker).execute(eq(DummyEnum.ENUM_B), any());
注1: any()
只應該使用,因為你沒有選擇或者值無關緊要(很少這種情況)。
注2:避免使用Matchers
類。 請改用ArgumentMatchers
。
從Mockito 2開始,不推薦使用此類,以避免與Hamcrest org.hamcrest.Matchers
類發生名稱沖突,javadoc也聲明此類可能會在3.0版中刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.