0

我有一个非常简单的例子,如下所示:

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: Expected: is(1000) got: <0>,我不明白为什么。显然我一定做错了什么,因为这是非常基本的嘲笑,所以我无法想象这不起作用。

4

3 回答 3

3

请注意,您在 上记录了期望foo1(),但后来又调用foo()了...所以当然,它返回0,而不是1000

于 2013-02-22T11:55:37.577 回答
1

您需要的是间谍而不是模拟。

http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#13

试试这个

Foo foo = new Foo();
Foo f = spy(foo);
于 2013-02-22T15:04:29.317 回答
0

当 CGLIB 掌握了你的Foo课程时,它并不关心你有什么聪明的实现。您的退货声明不予考虑。Mockito 看到 (1) 一个名为 Foo 的模拟类,(2) 调用 foo1() 时的指令和 (3) 调用 foo() 时没有指令。

在风格上不是现在比doReturn更受欢迎吗?所以;

when(f.foo1()).thenReturn(1000);
于 2013-02-22T15:37:07.547 回答