Heim >Java >javaLernprogramm >Hier sind einige Titeloptionen, die sich auf den Frageaspekt und das Kernproblem/die Kernlösung konzentrieren: Option 1 (Direkt): * Wie verspotte ich mit „new()' initialisierte Objekte mit Mockito Spies? Option 2 (Proble
Testen von Klassen mit new()-Operatoraufrufen mit Mockito
Das Verspotten von Klassen, die Instanzen mit dem new()-Operator initialisieren, kann besonders herausfordernd sein beim Umgang mit Legacy-Code. Ein solches Beispiel ist die login()-Methode in der TestedClass-Klasse, die ein LoginContext-Objekt instanziiert.
Die Herausforderung entsteht beim Versuch, diese Klasse mit Mockito zu testen, da vor der Instanziierung eine JAAS-Sicherheitseinrichtung erforderlich ist. Ohne den externen Aufruf von LoginContext scheint es unmöglich, das Objekt zu verspotten.
Lösung: Verwendung von Mockito-Spionen
Um dieses Hindernis zu überwinden, stellt Mockito Spione bereit, eine einzigartige Funktion, die dies ermöglicht Sie können Spione für echte Objekte erstellen. Spione rufen die tatsächlichen Methoden des ausspionierten Objekts auf, Sie können jedoch bei Bedarf bestimmte Methoden nachahmen oder durchsetzen.
Im Fall der TestedClass lautet die Lösung wie folgt:
<code class="java">TestedClass tc = spy(new TestedClass()); LoginContext lcMock = mock(LoginContext.class); when(tc.login(anyString(), anyString())).thenReturn(lcMock);</code>
Hier erstellen wir einen Spion für die TestedClass, der es uns effektiv ermöglicht, mit den echten Methoden zu interagieren und das erwartete Verhalten durchzusetzen. Indem wir die login()-Methode verspotten, können wir den Rückgabewert steuern und die an sie übergebenen Parameter überprüfen.
Das obige ist der detaillierte Inhalt vonHier sind einige Titeloptionen, die sich auf den Frageaspekt und das Kernproblem/die Kernlösung konzentrieren: Option 1 (Direkt): * Wie verspotte ich mit „new()' initialisierte Objekte mit Mockito Spies? Option 2 (Proble. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!