我知道我不应该以这种方式使用Mockito,但我不明白为什么这个Mockito代码:
public class Demo {
public static void main(String... args){
Foo foo = Mockito.mock(Foo.class);
Mockito.doReturn(-1).when(foo);
System.out.println(foo.myMethod("a"));
System.out.println(foo.myMethod("a"));
}
public interface Foo{
int myMethod(Object o);
}
}
给出这个结果:
0
-1
而不是:
0
0
doReturn()
缺少参数类型安全性。
从 javadocMockito.doReturn()
(重点不是我的(:
在无法使用的极少数情况下使用
doReturn()
when(Object)
.请注意,总是建议将 Mockito.when(Object( 用于存根 因为它是参数类型安全的并且更具可读性(尤其是当 存根连续调用(。
你实际上并没有像你必须的那样使用when()
,所以你会得到一个奇怪的结果,因为它是宽容的。
你想存根 Mock 的返回值:
Mockito.doReturn(-1).when(foo).myMethod(Mockito.any());
你不想存根模拟本身:
Mockito.doReturn(-1).when(foo);
这是没有意义的:为什么引用foo
应该返回一些东西?
或者更好地使用不那么宽容Mockito.when()
:
Mockito.when(foo).thenReturn(-1); // same oddity will not compile
Mockito.when(foo.myMethod(any())).thenReturn(-1); // but it will compile