Seit Java 8 können Sie die argumentlose anyMethode verwenden, und das Typargument wird vom Compiler abgeleitet:
verify(bar).doStuff(any());
Erläuterung
Das Neue in Java 8 ist, dass der Zieltyp eines Ausdrucks verwendet wird, um Typparameter seiner Unterausdrücke abzuleiten. Vor Java 8 wurden nur Argumente für Methoden verwendet, die für die Inferenz von Typparametern verwendet wurden (meistens).
In diesem Fall ist der Parametertyp von doStuffder Zieltyp für any(), und der Rückgabewerttyp von any()wird entsprechend diesem Argumenttyp ausgewählt.
Dieser Mechanismus wurde in Java 8 hauptsächlich hinzugefügt, um Lambda-Ausdrücke kompilieren zu können, verbessert jedoch allgemein die Typinferenzen.
Primitive Typen
Dies funktioniert leider nicht mit primitiven Typen:
public interface IBar {
void doPrimitiveStuff(int i);
}
verify(bar).doPrimitiveStuff(any()); // Compiles but throws NullPointerException
verify(bar).doPrimitiveStuff(anyInt()); // This is what you have to do instead
Das Problem ist, dass der Compiler Integerals Rückgabewert von ableitet any(). Mockito ist sich dessen nicht bewusst (aufgrund der Typlöschung) und gibt den Standardwert für Referenztypen zurück null. Die Laufzeit versucht, den Rückgabewert zu entpacken, indem sie die intValueMethode aufruft , bevor sie an übergeben wird doStuff, und die Ausnahme wird ausgelöst.
anyMethode einfach funktionieren sollte. Sie suchen keine Antwort für Dinge, die nur funktionieren!