Возможно ли в mockito проверить, был ли вызван метод для макета, основываясь на том, действительно ли макет использовался в тестируемом модуле?
В качестве простого примера я поставляю фиктивную фабрику (FooFactory) для моего тестируемого модуля, и когда вызывается Foo.create (), он возвращает макет (Foo), который будет использоваться определенными методами в модуле. -под-тест. Как я могу проверить, что Foo.method () вызывается, только если Foo.create () был вызван тестируемым модулем?
Я предполагаю, что код будет выглядеть примерно так:
@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. Очевидно, я мог бы добавить проверку к каждому тесту, где я знаю, что необходим Reader, но это, похоже, требует много усилий.