モックで、モックがテスト対象ユニットで実際に使用されたかどうかに基づいて、モックでメソッドが呼び出されたことを確認することは可能ですか?
簡単な例として、テスト対象のユニットにモックファクトリ(FooFactory)を指定し、Foo.create()を呼び出すと、テスト対象のユニットの特定のメソッドで使用されるモック(Foo)を返します。テスト。Foo.create()が被テストユニットによって呼び出された場合にのみ、Foo.method()が呼び出されることを確認するにはどうすればよいですか?
コードは次のようになると思います。
@Before
public void init() {
Foo mockFoo = mock(Foo.class);
when(fooFactory.create()).thenReturn(mockFoo);
test = new UnitUnderTest(fooFactory);
}
@Test
... may or may not create a foo ...
@After
public void cleanup() {
if (verify(fooFactory).create()) { // Here's the 'conditional verification'
Foo mockFoo = fooFactory.create();
verify(mockFoo).close();
}
}
もう少し具体的な例として、私のファクトリは閉じていることを確認したいReaderオブジェクトを返しますが、クラス内のすべてのメソッドが実際にReaderを構築するわけではありません。リーダーが必要であることがわかっているすべてのテストに検証を追加することはできますが、それは多くの重複した作業のようです。