簡體   English   中英

指定在Mockito doReturn方法中傳遞給方法的特定枚舉

[英]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.

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