Mockito: Methoden die Class-Objekte liefern: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „= Mocken von Methoden die Class-Objekte liefern = Ein spezielles Problem ist das mocken von Methoden die {{java|Class}}-Objekte liefern. Betrachten wir dazu fo…“) |
Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
[[Category:Java]] | |||
[[Category:Mockito]] | |||
= Mocken von Methoden die Class-Objekte liefern = | = Mocken von Methoden die Class-Objekte liefern = | ||
Ein spezielles Problem ist das mocken von Methoden die {{java|Class}}-Objekte liefern. | Ein spezielles Problem ist das mocken von Methoden die {{java|Class}}-Objekte liefern. |
Version vom 23. Juni 2021, 18:16 Uhr
Mocken von Methoden die Class-Objekte liefern
Ein spezielles Problem ist das mocken von Methoden die Class
-Objekte liefern.
Betrachten wir dazu folgende Klasse:
class Foo { Class<?> klasse() { return String.class; } }
Das Mocken der Methode klasse
könnte dann so aussehen:
Mockito.when(foo.klasse()).thenReturn(Integer.class);
Läuft aber auf einen Fehler. Was den Fehler tatsächlich verursacht ist noch zu untersuchen, jedenfalls geht's so nicht -- aber wie dann? Es giebt dafür mindestens zwei work arounds:
Casting
Der Fehler mit dem uns der Compiler konfrontiert sieht so aus:
The method thenReturn(Class<capture#3-of ?>) in the type OngoingStubbing<Class<capture#3-of ?>> is not applicable for the arguments (Class<Integer>)
Was hingegen nicht funktioniert ist ein Casting von Integer.class
auf Class<?>
.
Wo also hincasten? Das Problem hat anscheinend etwas mit der Parametrisierung des Typs der Klasse Class
, verwendet man stattdessen den raw type funktionierts:
Mockito.when(foo.klasse()).thenReturn((Class) Integer.class);
Allerdings warnt der Compiler dann vor der Verwendung des raw types. Wen das nicht anficht, der kann's so machen.
doReturn...when
Die elegantere Methode führt über die Umgehung des when...then-Konstrukts. Ohne lange Vorrede:
Mockito.doReturn(Integer.class).when(foo).klasse();
Dieses Konstrukt vermeidet auch die Compiler-Warnung.