我有一个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,但我不想只说出该类的任何实例,我想从该类中指定某个枚举。
答案 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版中删除。