Ist es in Mockito möglich zu überprüfen, ob eine Methode auf einem Schein aufgerufen wurde, basierend darauf, ob der Schein tatsächlich in der geprüften Einheit verwendet wurde?Mockito bedingte Überprüfung mit Fabriken
Für ein einfaches Beispiel, ich liefern eine Scheinfabrik (FooFactory) zu meiner Einheit unter Test, und wenn Foo.create() aufgerufen wird, gibt es einen Schein (Foo), um von bestimmten Methoden in der verwendet werden zu testende Einheit. Wie kann ich überprüfen, dass Foo.method() nur aufgerufen wird, wenn Foo.create() von der zu testenden Einheit aufgerufen wurde?
Ich Vorstellungsvermögen, dass der Code in etwa so aussehen würde:
@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();
}
}
geschlossen Für ein wenig mehr konkretes Beispiel, gibt mein Werk ein Reader-Objekt, das ich will, um sicherzustellen, aber nicht jedes Verfahren in Die Klasse konstruiert tatsächlich einen Reader. Ich könnte natürlich die Überprüfung zu jedem Test hinzufügen, wo ich weiß, dass der Reader benötigt wird, aber das scheint eine Menge Doppelaufwand zu sein.
+1. Sie können für beide Fälle einen separaten Komponententest erstellen (z. B. testWasInteraction, testNoInteraction) und haben keine weiteren Verifizierungsmethoden in Aufräummethoden. Unterste Zeile - wenn Sie diese Überprüfung wünschen, schreiben Sie einen spezifischen Komponententest. Am Ende, wenn es einen Fehler gibt, würden Sie einen Testfehler sehen, nicht mehrere Fehler in jedem Testfall, der diese Methode verwendet. –