Возможно ли в 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 необходим, но это похоже на дублирование усилий.