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 に答える