Mockito 存根意外行为



我知道我不应该以这种方式使用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

最新更新