15

オブジェクトでのメソッド呼び出しの順序を確認するために Mockito を使用していInOrderます。しかし、呼び出しの全体的な順序付けには関心がありません。メソッド呼び出しの特定のグループがすべて、他のメソッドが呼び出される前に発生するということだけです。たとえば、このように

@Test
public void testGroupOrder() {
    Foo foo1 = mock(Foo.class);
    Foo foo2 = mock(Foo.class);
    Bar underTest = new Bar();
    underTest.addFoo(foo1);
    underTest.addFoo(foo2);

    underTest.fire()

    InOrder inOrder = inOrder(foo1,foo2);

    inorder.verify(foo1).doThisFirst();
    inorder.verify(foo2).doThisFirst();

    inorder.verify(foo1).beforeDoingThis();
    inorder.verify(foo2).beforeDoingThis();
}

Fooしかし、このテストはインスタンスの順序をテストするため、テストが多すぎます。しかし、私はさまざまな方法の順序にのみ興味があります。underTest実際、 のインスタンスを区別したくありませFooん。内部順序があるかどうかに関係なく、foo がどの順序で呼び出されるかは問題ではありません。実装の詳細としてそれを保持したいと思います。

ただし、他の fooで呼び出される前にすべてdoThisFirst()の foo で呼び出されていることが重要です。それをMockitoで表現することは可能ですか?どのように?beforeDoingThis()

4

2 に答える 2

8

Mockito は、inorder 関数に渡されたすべてのモックの順序を検証します。したがって、foo の順序を確認したくない場合は、2 つの別個の in-order を作成する必要があります。すなわち

@Test
public void testGroupOrder() {
    Foo foo1 = mock(Foo.class);
    Foo foo2 = mock(Foo.class);
    Bar underTest = new Bar();
    underTest.addFoo(foo1);
    underTest.addFoo(foo2);

    underTest.fire()

    InOrder inOrderFoo1 = inOrder(foo1);
    inOrderFoo1.verify(foo1).doThisFirst();
    inOrderFoo1.verify(foo1).beforeDoingThis();

    InOrder inOrderFoo2 = inOrder(foo2);
    inOrderFoo2.verify(foo2).doThisFirst();
    inOrderFoo2.verify(foo2).beforeDoingThis();
}
于 2012-09-14T09:01:05.003 に答える