我有一个非常简单的例子如下:
public class Foo {
public int foo() {
return foo1();
}
public int foo1() {
return 1;
}
}
public class FooTest {
@Test public void testFoo() {
Foo f = mock(Foo.class);
doReturn(1000).when(f).foo1();
assertThat(f.foo(), equalTo(1000));
}
}
我得到一个java.lang.AssertionError:预期:is(1000)得到:<0>,我不明白为什么。很明显,我一定做错了什么,因为这是非常基本的嘲讽,所以我无法想象这不起作用。
请注意,您在foo1()
上记录了期望值,但随后调用了foo()
。。。当然,它返回的是0
,而不是1000
。
您需要的是一个间谍而不是一个mock。
http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#13
试试这个
Foo foo = new Foo();
Foo f = spy(foo);
当CGLIB获得Foo
类时,它并不关心您的底层有什么聪明的实现。不考虑您的报税表。Mockito看到(1)一个名为Foo的模拟类,(2)调用foo1()时有一条指令,(3)调用Foo()时没有指令。
从风格上讲,时的不是比doReturn更受欢迎吗?所以
when(f.foo1()).thenReturn(1000);