2016-04-28 4 views
2

Ich möchteWie man Aufrufe von Aufrufen zu einem einzigen Schein geltend macht?

sagen einen JUnit-Test mit Mockito schreiben

dies meine Mock ist:

IServerApi routingServerApi = mock(ServerApi.class); 
     when(routingServerApi.sendRequest(anyString(), eq("request1"))).thenReturn(myObj1); 
     when(routingServerApi.sendRequest(anyString(), eq("request2"))).thenReturn(myObj2); 

Ich möchte sicherstellen, dass sendRequest mit request1 nur aufgerufen wird, bevor es mit request2 (und kein anderer Aufruf aufgerufen wird zwischen Sie).

Wie kann ich das tun?

ich diese SOF Frage gesehen haben,

aber ich möchte nur ein Mock Reihenfolge der Anrufe, um zu überprüfen, nicht zwei.

Diese Syntax für mich nicht funktioniert (Kompilierungsfehler, wenn Initing inOrder())

InOrder inOrder = inOrder(mockRoutingServerApi); 

inOrder.verify(mockRoutingServerApi).sendRtUpdates(time1, ImmutableList.of("update1")); 
inOrder.verify(mockRoutingServerApi).sendRoutingRequest("request1"); 
inOrder.verify(mockRoutingServerApi).sendRtUpdates(time1, ImmutableList.of("update2")); 
inOrder.verify(mockRoutingServerApi).sendRoutingRequest("request2"); 

Es erkennt nicht inOrder()

enter image description here

Einige kommentierte ich ArgumentCaptor verwenden können, aber ich couldn Ich sehe nicht wie.

+0

Was sagt die Fehlermeldung? Ihr Code sieht richtig aus und sollte keinen Kompilierungsfehler ergeben, da 'inOrder (Object ... mocks) 'varargs erhalten. –

+0

es erkennt nicht inOrder() Methode –

Antwort

1

ArgumentCaptor kann anstelle von InOrder zur Überprüfung empfangener Werte verwendet werden.

ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class); 
verify(mockRoutingServerApi, times(2)).sendRoutingRequest(captor.capture()); 

Und dann können Sie überprüfen waht zu sendRoutingRequest

captor.getAllValues() //Should be a List with values {"request1", "request2"} 

geben Das sieht eher wie ein Rad zu erfinden, da MockitoInOrder.verify unterstützt. Stellen Sie sicher, dass Sie einen statischen Import für Mockito haben. Andernfalls versuchen Sie Mockito.inOrder(routingServerApi).

+0

Es erkennt 'inOrcer()' Init-Methode nicht –

0

Ich hatte ein ähnliches Problem. Das Problem besteht möglicherweise darin, dass Sie sowohl die InOrder-Klasse als auch die inOrder-Methode importieren müssen;

import org.mockito.InOrder; 
import static org.mockito.Mockito.inOrder; 

Die Methode sollte dann erkannt werden, wenn Sie den zweiten Import oben hinzufügen.


Ein anderer Weg, dies zu tun (was dasselbe ist wirklich tun) ist

import org.mockito.Mockito; 

importieren und die Methode aus der Klasse dh

InOrder inOrder = Mockito.inOrder(mockRoutingServerApi); 

this helps nennen!

Verwandte Themen