logo

Mock vs. Stub vs. Spy

Verspotten

Mocks sind die Objekte, die Methodenaufrufe speichern. Es handelt sich dabei um die dynamischen Wrapper für die in den Tests verwendeten Abhängigkeiten. Es wird verwendet, um die Interaktion zwischen den Java-Klassen aufzuzeichnen und zu überprüfen. Ein Mock ist als die leistungsstärkste und flexibelste Version des Testdoubles bekannt. Wir verwenden eine Methode, die zum Verspotten aufgerufen wird verspotten() .

Die Hauptfunktion der Verwendung von Mocks besteht darin, dass sie die vollständige Kontrolle über das Verhalten der Mock-Objekte ermöglichen. Die Scheinobjekte werden im Allgemeinen für verwendet Verhaltensüberprüfung . Unter Verhalten versteht man die Überprüfung der korrekten Methoden und Pfade, die auf die Objekte angewendet werden.

Mocks werden meist mithilfe einer Bibliothek oder eines Mock-Frameworks wie Mockito, JMock und EasyMock erstellt. Es wird zum Testen einer großen Reihe von Tests verwendet, bei denen Stubs nicht ausreichen. Eine der wesentlichen Funktionen von Mock besteht darin, dass wir überprüfen können, wie oft eine bestimmte Methode aufgerufen wird.

Der folgende Codeausschnitt zeigt, wie man Mock() verwendet.

 ToDoService doService = mock(ToDoService.class); 

Stub

Stubs sind Objekte, die vordefinierte Daten enthalten und diese verwenden, um während Tests Antworten zu geben. Mit anderen Worten: Ein Stub ist ein Objekt, das einem realen Objekt mit der minimalen Anzahl an Methoden ähnelt, die für einen Test erforderlich sind. Stubs werden verwendet, wenn wir keine Objekte verwenden möchten, die eine Antwort mit echten Daten liefern würden. Ein Stub wird als die leichteste und die statischste Version des Tests bezeichnet.

Die Hauptfunktionen der Stubs sind:

  • Es gibt immer die vordefinierte Ausgabe zurück, unabhängig von der Eingabe.
  • Es kann verwendet werden, um den Datenbankobjekten zu ähneln.
  • Stubs werden verwendet, um die Komplexität zu reduzieren, die bei der Erstellung der realen Objekte auftritt. Sie werden hauptsächlich für Auftritte verwendet staatliche Überprüfung .

Spion

Spione sind bekannt als teilweise Scheinobjekte . Das bedeutet, dass der Spion ein Teilobjekt oder eine halbe Attrappe des realen Objekts erstellt, indem er die echten Objekte ausspioniert oder ausspioniert. Beim Spionieren bleibt das reale Objekt unverändert und wir spionieren nur einige spezifische Methoden davon aus. Mit anderen Worten, wir nehmen das vorhandene (reale) Objekt und ersetzen oder Spion nur einige seiner Methoden.

Spione sind nützlich, wenn wir eine große Klasse voller Methoden haben und bestimmte Methoden verspotten möchten. In diesem Szenario sollten wir lieber Spione als Mocks und Stubs verwenden. Es ruft das tatsächliche Methodenverhalten auf, wenn die Methoden nicht stubbed sind.

In Mockito wird die Methode spy() zum Erstellen von Spionageobjekten verwendet. Es ermöglicht uns, die normalen Methoden des realen Objekts aufzurufen. Der folgende Codeausschnitt zeigt, wie die spy()-Methode verwendet wird.

 List spyArrayList = spy(ArrayList.class); 

Unterschied zwischen Stub und Mock

Parameter Stub Verspotten
Datenquelle Die Datenquelle von Stubs ist fest codiert. Es ist normalerweise eng mit der Testsuite verbunden. Daten zu Mocks werden durch die Tests erstellt.
Erstellt von Stubs werden in der Regel handgeschrieben und einige werden mit Tools generiert. Mocks werden normalerweise mithilfe der Bibliothek eines Drittanbieters wie Mockito, JMock und WireMock erstellt.
Verwendung Stubs werden hauptsächlich für einfache Testsuiten verwendet. Mocks werden hauptsächlich für große Testsuiten verwendet.
Grafische Benutzeroberfläche (GUI) Stubs haben keine GUI. Mocks haben eine GUI.

Im Folgenden sind einige Unterschiede zwischen Mock und Spy aufgeführt:

Parameter Verspotten Spion
Verwendung Mocks werden verwendet, um vollständig simulierte oder Dummy-Objekte zu erstellen. Es wird hauptsächlich in großen Testsuiten verwendet. Spione werden zum Erstellen teilweiser oder halber Scheinobjekte verwendet. Ebenso wie Mock werden Spione auch in großen Testsuiten eingesetzt.
Standardverhalten Bei der Verwendung von Scheinobjekten ist das Standardverhalten von Methoden (wenn sie nicht gestubbt sind) „nichts tun“ (führt nichts aus). Bei der Verwendung von Spionageobjekten entspricht das Standardverhalten der Methoden (sofern sie nicht gestuft sind) dem tatsächlichen Verhalten der Methode.

In unseren vorherigen Tutorials haben wir einige Beispiele für Stubbing, Spott und Spionage besprochen. Um den Unterschied zwischen Stubbing, Spott und Spionage besser zu verstehen, gehen Sie die Beispiele durch.