2015-04-27 9 views
9

Ich möchte, dies zu tun:Mockito Matchers.any (...) auf ein Argument nur

verify(function, Mockito.times(1)).doSomething(argument1, Matchers.any(Argument2.class)); 

Wo argument1 eine specfic Instanz vom Typ ist Argument1 und argument2 jeder ist Instanz des Typs Argument2.

Aber ich erhalte eine Fehlermeldung:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid use of argument matchers! 2 matchers expected, 1 recorded. This exception may occur if matchers are combined with raw values: 
    //incorrect: 
    someMethod(anyObject(), "raw String"); When using matchers, all arguments have to be provided by matchers. For example: 
    //correct: 
    someMethod(anyObject(), eq("String by matcher")); 

dass die Beratung Nach schreibe ich kann die folgend und alles ist in Ordnung:

verify(function, Mockito.times(1)).doSomething(Matchers.any(Argument1.class), Matchers.any(Argument2.class)); 

Wo ich für jede arguement vom Typ Suche Argument1 und jedes Argument vom Typ Argument2.

Wie kann ich dieses gewünschte Verhalten erreichen?

Antwort

13

Es gibt mehr als einen möglichen Argument-Matcher und einer ist , der in der Ausnahmebedingungsnachricht erwähnt wird. Verwendung:

verify(function, times(1)).doSomething(eq(arg1), any(Argument2.class)); 

(statische Importe soll es sein - eq() ist Matchers.eq()).

Sie haben auch same() (was Bezug auf Gleichheit, dh ==), und allgemeiner können Sie Ihre eigenen Matcher schreiben.

+0

Starrte mich im Gesicht, dient mir richtig, um nicht meine Zeit zu lesen! Dank dafür. –