Mockito和这个电话

时间:2013-02-22 10:59:19

标签: mockito

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

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>,我不明白为什么。显然我必须做错事,因为这是非常基本的嘲弄,所以我无法想象这不起作用。

3 个答案:

答案 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);