ich, dass ein Verfahren mit der folgenden Signatur zu verifizieren versucht bin, genannt wurde:Mockito anyMapOf verschachtelt Generika
public void process(Map<String, Set<String>> data) {
...
}
Die verschachtelte parametrisierte Set me Schwierigkeiten verursacht. Ich kann es richtig, wie so mit dem jede() Matcher zu überprüfen erhalten:
verify(dataProcessor).process(Matchers.<Map<String, Set<String>>> any());
Wie in Mockito: Verifying with generic parameters beschrieben, obwohl annoyingly es nicht funktioniert, wenn ich eine direkte statische Import von Matchers.any tun und nennen Sie es, wie gerade :
verify(dataProcessor).process(<Map<String, Set<String>>> any())
Aber anyMapOf (clazz, clazz) scheint die geeignetere Matcher in diesem Fall. Da Sie Set.class nicht tun können, bin ich mir nicht sicher, wie Sie das machen würden. Die folgende funktioniert nicht, weil der Mangel an generic:
verify(dataProcessor).process(anyMapOf(String.class, Set.class));
Ist es möglich, diese Situation mit anyMapOf zu überprüfen, oder sollte ich Stick mit Matchers. <> any()?
Deine Methodensignatur schränkt bereits ein, welchen Argumenttyp die Methode verwendet, warum verwendest du nicht 'any()'? Code, der Ihre Methode nicht mit einer 'Map>' aufruft, kompiliert nicht einmal ... –
fge
@fge Java-Typ-Inferenz leitet keine Typvariablen im Aufruf von 'any' basierend auf den in' 'verfügbaren Parametertypen ab process', weil 'process' Überladungen und/oder eigene Typparameter haben könnte. Dies geschieht in Rückgabewerten und Feldern, da der Typ bereits explizit als Rückgabewerttyp oder Feldtyp definiert ist. Es ist alles in [der extrem undurchsichtigen JLS 15.12.2] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2). –