Es scheint mockito nur zu überprüfen, ob eine Methode eines Mock-Objekts aufgerufen wird und das Mock-Objekt immer etw hat. wie doReturn (). when (Scheinobjekt) ...
Aber kann ich ein Scheinobjekt erstellen und doReturn (). When (Scheinobjekt) .. definieren und dann überprüfen, ob eine Methode eines anderen Objekts aufgerufen wird?
Ich möchte Folgendes tun: Ich definiere eine Scheinumgebung und gebe eine Antwort zurück, egal was passiert. Aber dann möchte ich überprüfen, ob verschiedene Methoden von anotherObj in verschiedenen Fällen aufgerufen werden.
Wie geht das?
public class BaseClass {
private Environment mockEnvironment;
@Test
public void testcase () {
setMockitoEnvironment();
response = foo(mockEnvironment, argument1);
verify(anotherObj).codePath1(...);
response = foo(mockEnvironment, argument2);
verify(anotherObj).codePath2(...);
}
}
//this method successfully return a response with any input
//because I do not care how response is eventually generated,
//I only care whether code path reaches createResponse() via
//code path 1 or code path 2.
private void setMockitoEnvironment() {
mockEnvironment = mock(Environment.class);
doReturn (response).when(mockEnvironment).createResponse(for any input);
}
private Response foo(...) {
...
return createResponse(...);
}
Sie können ein Mockito Spy verwenden. Wenn Sie anotherObj
als Spion einrichten, können Sie Methodenaufrufe für dieses Objekt überprüfen. In Ihrem Beispiel müssen Sie sicherstellen, dass der Aufruf von foo
den Spion anstelle einer normalen Implementierung von anotherObj
verwendet. Der Spion ist so eingerichtet:
AnotherClass anotherObjSpy = Mockito.spy(new AnotherClass());
// do stuff
verify(anotherObjSpy).codePath1(...);