Antworten:
Es gibt einen typsicheren Weg: Verwenden ArgumentMatchers.any()
und qualifizieren Sie ihn mit dem Typ:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
(Matchers.<AsyncCallback<ResponseX>>any()
Matchers
ist eigentlich veraltet, hat aber ArgumentMatchers
funktioniert.
Mit Java 8 können Sie any()
aufgrund der erweiterten Typinferenz einfach (unter der Annahme eines statischen Imports) ohne Argument oder Typparameter verwenden. Der Compiler weiß jetzt aus dem Zieltyp (dem Typ des Methodenarguments), dass Sie tatsächlich meinen Matchers.<AsyncCallback<ResponseX>>any()
, was die Lösung vor Java 8 ist.
any()
passen AsyncCallback<AnyOtherType>
?
AsyncCallback<AnyOtherType>
sollte nicht einmal kompiliert werden, wenn der Argumenttyp 'AsyncCallback <ResponseX>' ist.
when(x.y(any())).thenAnswer(...)
zum Beispiel, wo y
ist public <T> T y(AsyncCallback<T> arg)
. Vielleicht ist es besser, den Typ in der Antwort zu überprüfen, wenn dies erforderlich ist?
isA()
. Wenn das Objekt a enthältClass
Objekt enthält, das dem Typ entspricht, und die Schnittstelle dies verfügbar macht, können Sie es wahrscheinlich in einem benutzerdefinierten Matcher überprüfen. Oder Sie können beispielsweise im Fall von a Collection
den Typ der Elemente überprüfen.
Matchers
wurde ersetzt durch ArgumentMatchers
in Mockito v2
Ich musste den folgenden Mechamismus anwenden, um Generika zuzulassen:
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
Hoffe das hilft jemandem.
Pierrefevrier-Kommentar als Antwort posten, was nützlich sein kann, wenn er in einer Antwort anstelle von Kommentaren enthalten ist.
Mit neuen Versionen von Mockito: (Matchers.<AsyncCallback<ResponseX>>any()
Nach der Antwort von thSoft bedeutete das Setzen des qualifizierten Aufrufs einer beliebigen Methode () in der Methode, dass ich die Qualifikation entfernen konnte, da der Rückgabetyp Rückschlüsse zuließ:
private HashMap<String, String> anyStringStringHashMap() {
return Matchers.any();
}
Sie können es einfach umsetzen und Unterdrückungswarnungen hinzufügen, wenn Sie möchten:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
Wenn Java 'generische' Generika zulässt, könnten sie eine Methode wie diese haben, nach der Sie suchen
private static <T, E> T<E> mock(Class<T<E>> clazz)
You cannot use argument matchers outside of verification or stubbing.
@SuppressWarnings
: Pre-Java 8, wenn Sie es einer separaten Variablen zuweisen any()
möchten , können Sie es wie in der Antwort von INToy verwenden. Jetzt mit Java 8, any()
kann inline verwendet werden, ohne dass eine separate Zuordnung erforderlich ist.
Ich hatte ein ähnliches Problem mit Spring Example
:
Mockito.when(repo.findAll(Mockito.<Example<SrvReqToSupplierComment>>any()))
.thenReturn(Lists.emptyList());
Hier müssen Sie die Qualifikation verwenden. Die Methode b / c findAll kann mehrere Typen annehmen, z. B. Sort
und Iterable
. Sie können Mockito.any(Example.class)
natürlich auch die Typensicherheitswarnung verwenden.