Heim  >  Artikel  >  Java  >  Wie teste ich Klassen mit eingebetteten „new()“-Aufrufen mit Mockito Spies?

Wie teste ich Klassen mit eingebetteten „new()“-Aufrufen mit Mockito Spies?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 12:48:29814Durchsuche

How to Test Classes with Embedded `new()` Calls Using Mockito Spies?

Testen von Klassen mit eingebetteten new() Aufrufen mit Mockito

Betrachten Sie eine Legacy-Klasse (TestedClass), das ein LoginContext-Objekt mithilfe eines direkten new()-Aufrufs instanziiert:

<code class="java">public class TestedClass {
  public LoginContext login(String user, String password) {
    LoginContext lc = new LoginContext("login", callbackHandler);
  }
}</code>

Das Testen dieser Klasse kann schwierig sein, wenn der LoginContext Die Instanziierung erfordert bestimmte JAAS-Sicherheitskonfigurationen. Um dieses Problem anzugehen, untersuchen wir die Verwendung von Mockito, um die Klasse LoginContext zu verspotten, ohne den ursprünglichen Quellcode zu ändern.

Verwendung von Mockito Spies

Mockito bietet einen praktischen Mechanismus namens Spione, der es uns ermöglicht, Spione realer Objekte zu erstellen, die die folgenden Methoden ausführen:

  • Echte Methoden werden standardmäßig aufgerufen (sofern nicht einzeln gestuft).
  • Spione können mit Vorsicht für Legacy-Code-Szenarien verwendet werden.

Um unsere Klasse mit Spionen zu testen, können wir den folgenden Code einführen:

<code class="java">TestedClass tc = spy(new TestedClass());
LoginContext lcMock = mock(LoginContext.class);
when(tc.login(anyString(), anyString())).thenReturn(lcMock);</code>

Dieser Code erstellt ein Spion der TestedClass-Instanz (tc) und verspottet die LoginContext-Klasse über lcMock. Die when()-Anweisung stoppt die login()-Methode, um den simulierten LoginContext zurückzugeben.

Der Einsatz von Spionen ermöglicht es uns, die ursprüngliche Klasse zu testen ohne den Aufrufmechanismus new() zu ändern, was einen flexiblen und effektiven Testansatz bietet.

Das obige ist der detaillierte Inhalt vonWie teste ich Klassen mit eingebetteten „new()“-Aufrufen mit Mockito Spies?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn