Ich erstelle eine allgemeine allgemeine Mock-Client zum Testen von HTTP-Interaktionen. Dafür wäre ich gerne in der Lage, eine Reihe von Antworten derselben Methode zu machen. Bei einem normalen Mock, wäre dies kein Problem sein:Mocking generische Anzahl von aufeinanderfolgenden Antworten von partiellen Mock mit Mockito
when(mock.execute(any(), any(), any())).thenReturn(firstResponse, otherResponses)
Allerdings habe ich eine partielle Mock verwenden, wo ich einfach Methode machte die HTTP-Anforderung verspotten will, da es keinen Zugang zu einem Live sein könnte Endpunkt oder das Internet im Allgemeinen in dem Kontext, in dem die Komponententests ausgeführt werden.
Also werde ich so etwas wie tun:
doReturn(response).when(spy).execute(hostCaptor.capture(), requestCaptor.capture(), contextCaptor.capture());
aber ich möchte in der Lage sein, mehr als eine Antwort zu unterstützen (nicht viel von einer „Wechselwirkung“). Aber es gibt keine doReturn-Methode, die mehr als eine Antwort gleichzeitig benötigt.
Mein erster Versuch an einer Lösung war es iterativ zu tun:
Stubber stubber = null;
for (HttpResponse response : responses) {
if (stubber == null) {
stubber = doReturn(response);
} else {
stubber = stubber.doReturn(response);
}
}
stubber.when(spy).execute(hostCaptor.capture(), requestCaptor.capture(), contextCaptor.capture());
Dies ist jedoch zu überprüfen, nicht fehlschlagen („Unfinished Anstoßen erkannt“), wenn der Test ausgeführt wird.
So - gibt es eine Möglichkeit, dies mit Mockito zu erreichen?
Danke fürs Lesen.
Dank verwenden Sie könnten für Ihre antworte David, aber mein Problem ist, dass ich die Anzahl von r im Allgemeinen nicht kenne Es handelt sich um ein Array (oder Varargs). – tveon
@tveon OK, siehe meine Bearbeitung, um mit dem Fall umzugehen. –
Das scheint genau das zu sein, wonach ich gesucht habe. :) – tveon