指定在Mockito doReturn方法

时间:2017-12-14 16:00:00

标签: java junit mockito

我有一个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&结果2。 如何指定使用ENUM_A执行execute()时返回Hello的字符串,使用ENUM_B返回执行()返回字符串Goodbye

我见过answer here,但我不想只说出该类的任何实例,我想从该类中指定某个枚举。

2 个答案:

答案 0 :(得分:4)

使用Matchers类的eq()方法(代表等于)。

Mockito.doReturn("Hello").when(mock).execute(Matchers.eq(dummyEnum.ENUM_A), anyObject());

Mockito.doReturn("Goodbye").when(mock).execute(Matchers.eq(dummyEnum.ENUM_B), anyObject());

答案 1 :(得分:3)

  

我在这里看到了答案,但我不想只说出任何实例   该类,我想从该类中指定某个枚举。

在你的情况下,只需传递枚举实例:

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版中删除。