2015-09-29 1 views
23

Angenommen, ich habe dieses Objekt objectDemo, die auf die Methode objectDemoMethod mit 2 Parametern String und null aufruft. Jetzt möchte ich, um zu überprüfen, dass diese Methode mit Mockito genannt wurde:Matchers.any() für Null-Wert in Mockito

objectDemo.objectDemoMethod("SAMPLE_STRING", null); 

Ich habe dies geschrieben:

Mockito.verify(objectDemo, Mockito.times(1)).objectDemoMethod(Matchers.any(String.class), null); 

aber es ist ein Fehler geben:

Invalid use of argument matchers for null value.

Gibt es eine andere Art und Weise Nullwert übergeben?

+1

quick side note: 'Mockito.times (1)' ist die Voreinstellung von 'verify' und kann weggelassen werden. –

Antwort

34

Die Fehlermeldung, die Sie erhalten, wird erwartet, da Sie Argument Matcher nur für ein Argument und nicht das andere Argument verwenden. Von Matchers Javadoc:

If you are using argument matchers, all arguments have to be provided by matchers.

Daher ist das Update auch eine Matcher für den zweiten Parameter des Verfahrens zu verwenden. In diesem Fall wäre es ein Matchierer, der zu null passt. Je nach Version von Mockito und Java können Sie haben:

  • Beginnend mit Mockito 2 können Sie ArgumentMatchers.isNull() verwenden. Dies funktioniert mit Java 8 und höher:

    verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull()); 
    

    Beachten Sie, wenn Sie mit Java 7 oder älter laufen lassen, müssen Sie eine explizite Umwandlung, diese Arbeit zu machen, weil die Typinferenz in diesen Versionen von Java tut nicht berücksichtigt werden genannt die Art des Verfahrens:

    verify(objectDemo, times(1)).objectDemoMethod(any(String.class), (String) isNull()); 
    
  • Wenn Sie 1 Mockito verwenden sind, können Sie die Matchers.isNull(clazz) verwenden stattdessen:

    verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull(String.class)); 
    

Für die Fälle Java ≤ 7 oder Mockito 1 verwendet das Beispiel einen Fall, in dem der zweite Parameter vom Typ String war: Er müsste durch den tatsächlichen Typ des Methodenparameters ersetzt werden.

+1

Nur eine Anmerkung Mockito hat 'Mockito.isNull (String.class)' veraltet 'sollte jetzt wie' (String) Mockito.isNull() 'aussehen Tunakis Beispiel sollte nun wie' verify (objectDemo, times (1)) aussehen. objectDemoMethod (any (String.class), String) isNull()); ' –

+0

@ScottLaHay Vielen Dank für Ihre Kommentare! Du hast recht, dass diese Antwort aktualisiert werden musste, und ich habe es gerade getan. – Tunaki