it-swarm-eu.dev

Wie überprüfe ich, ob eine Methode eines Nicht-Mock-Objekts aufgerufen wird?

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(...);
}
67
user389955

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(...);
91
K Erlandsson