我有一个非常简单的例子如下:
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:期望:是(1000)得到:< 0>,我不明白为什么。显然我必须做错事,因为这是非常基本的嘲弄,所以我无法想象这不起作用。
答案 0 :(得分:3)
请注意,您在foo1()
上记录了期望值,但之后又调用了foo()
...当然,它会返回0
,而不是1000
。
答案 1 :(得分:1)
你需要的是间谍而不是模拟。
http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#13
试试这个
Foo foo = new Foo();
Foo f = spy(foo);
答案 2 :(得分:0)
当CGLIB获得你的Foo
课程时,它并不关心你有什么聪明的实施。您的退货声明不予考虑。 Mockito看到(1)一个名为Foo的模拟类,(2)调用foo1()时的指令和(3)调用foo()时没有指令。
在 上优先选择doReturn时,上的不是吗?所以;
when(f.foo1()).thenReturn(1000);