„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Mock vs. Stub: Die wichtigsten Unterschiede verstehen

Mock vs. Stub: Die wichtigsten Unterschiede verstehen

Veröffentlicht am 07.11.2024
Durchsuche:342

Mock vs Stub: Understanding the Key Differences
Bei Softwaretests sind Mock vs. Stub zwei beliebte Arten von Testdoppeln, die zur Simulation von Abhängigkeiten verwendet werden. Sie helfen dabei, das Verhalten einer Komponente zu isolieren, indem sie beim Testen reale Abhängigkeiten durch kontrollierte Ersatzstoffe ersetzen. Während sowohl Mocks als auch Stubs ähnliche Zwecke erfüllen, werden sie je nach Art des Testszenarios unterschiedlich verwendet.
In diesem Artikel geht es eingehend um die wichtigsten Unterschiede zwischen Mocks und Stubs, ihre Anwendungsfälle und wann Sie sie in Ihrer Teststrategie verwenden sollten.

Was ist ein Testdouble?
Ein Testdouble ist ein allgemeiner Begriff für jedes Objekt oder jede Komponente, die beim Testen als Ersatz für eine echte Abhängigkeit dient. Ziel ist es, die zu testende Komponente zu isolieren und externe Faktoren zu entfernen, die das Testergebnis beeinflussen könnten. Mocks und Stubs sind zwei Arten von Testdoppeln, die häufig bei Unit- und Integrationstests verwendet werden.

Was ist ein Stub?
Ein Stub ist ein Test-Double, das vordefinierte Daten zurückgibt, wenn es von der getesteten Komponente aufgerufen wird. Es wird normalerweise verwendet, wenn die getestete Komponente Eingaben von einer Abhängigkeit erfordert, das tatsächliche Verhalten der Abhängigkeit jedoch für das Testergebnis irrelevant ist. Stubs bieten kontrollierte Antworten, sodass Sie sich nur auf die Logik innerhalb der Komponente konzentrieren können.

Beispiel für einen Stub:
Nehmen wir an, Sie testen eine Zahlungsabwicklungsfunktion. Anstatt ein echtes Zahlungsgateway aufzurufen, verwenden Sie einen Stub, der immer eine „Zahlung erfolgreich“-Antwort zurückgibt und so sicherstellt, dass die Logik in der Funktion unabhängig getestet werden kann.

const paymentGatewayStub = {
  processPayment: () => "payment successful"
};

function processOrder(paymentService) {
  const result = paymentService.processPayment();
  return result === "payment successful" ? "Order Complete" : "Order Failed";
}

// Test
console.log(processOrder(paymentGatewayStub));  // Output: "Order Complete"

In diesem Fall stellt der Stub sicher, dass der externe Dienst immer die erwartete Ausgabe zurückgibt, was das Testen der internen Logik erleichtert.

Was ist ein Mock?
Ein Mock ist ein Testdoppel, das nicht nur gefälschte Daten liefert, sondern auch Interaktionen zwischen Komponenten überprüft. Mithilfe von Mocks wird sichergestellt, dass die richtigen Methoden mit den richtigen Parametern aufgerufen werden und dass während der Ausführung die gewünschte Abfolge von Ereignissen auftritt. Sie werden typischerweise verwendet, wenn das Verhalten oder die Interaktion der Komponente für den Test von Bedeutung ist.
Beispiel für einen Mock:
Angenommen, Sie möchten mithilfe desselben Zahlungsbeispiels überprüfen, ob die Methode „processPayment()“ während der Auftragsverarbeitung genau einmal aufgerufen wird.

const paymentGatewayMock = {
  processPayment: jest.fn().mockReturnValue("payment successful")
};

function processOrder(paymentService) {
  paymentService.processPayment();  
}

// Test
processOrder(paymentGatewayMock);
expect(paymentGatewayMock.processPayment).toHaveBeenCalledTimes(1);

In diesem Fall überprüft der Mock die Interaktion, indem er prüft, ob die Methode aufgerufen wurde, und stellt so sicher, dass sich die Komponente während der Ausführung korrekt verhält.
Hauptunterschiede zwischen Mock und Stub
Aspekt-Mock-Stub
Zweck: Überprüft Interaktionen zwischen Komponenten. Bietet vordefinierte Antworten.
Verhalten Validiert Methodenaufrufe und Parameter. Gibt nur statische Daten zurück
Verwendungsszenario Wird verwendet, wenn Interaktion wichtig ist. Wird verwendet, wenn die Datenausgabe ausreicht
Komplexität Komplexer zu implementieren, einfacher zu erstellen
Beispieltest Verifizierung von Methodenaufrufen Testlogik mit festen Antworten

Wann man einen Stub verwendet
• Einfache Logik testen: Verwenden Sie einen Stub, wenn Sie nur die Ausgabe einer Abhängigkeit steuern müssen.
• Datengesteuerte Tests: Wenn der Schwerpunkt darauf liegt, zu testen, wie sich Ihre Komponente mit bestimmten Daten verhält, sind Stubs besser geeignet.
• Beispielanwendungsfall: Wenn Sie eine Anmeldefunktion testen, die Benutzerdaten aus einer Datenbank benötigt, verwenden Sie einen Stub, um einen Dummy-Benutzer zurückzugeben, ohne die echte Datenbank aufzurufen.
Wann man einen Mock verwendet
• Interaktionsbasiertes Testen: Wenn der Fokus darauf liegt, sicherzustellen, dass die richtigen Methoden mit den richtigen Parametern aufgerufen werden, verwenden Sie ein Mock.
• Testen komplexer Interaktionen: Mocks sind ideal für Komponenten, die mit mehreren Diensten oder APIs interagieren.
• Beispielanwendungsfall: Wenn Sie einen E-Mail-Versanddienst testen, verwenden Sie einen Mock, um zu überprüfen, ob die sendEmail()-Funktion mit dem erwarteten Empfänger und der erwarteten Nachricht aufgerufen wurde.
Können Mocks und Stubs zusammen verwendet werden?
Ja, in einigen Fällen werden Mocks und Stubs gemeinsam im selben Test verwendet, um sowohl eine Interaktionsvalidierung als auch kontrollierte Antworten zu erreichen. Beispielsweise könnten Sie einen Stub verwenden, um bestimmte Daten zurückzugeben, und einen Mock, um zu überprüfen, ob ein bestimmter Dienst aufgerufen wurde.
Vor- und Nachteile von Mocks und Stubs
Vorteile von Stubs:
• Einfach und leicht zu implementieren
• Nützlich zum isolierten Testen der Komponentenlogik
Nachteile von Stubs:
• Methodenaufrufe oder Parameter können nicht validiert werden
• Beschränkt auf statische Antworten
Vorteile von Mocks:
• Verifiziert Verhalten, Interaktionen und Abläufe
• Nützlich für komplexe Szenarien mit mehreren Abhängigkeiten
Nachteile von Mocks:
• Erfordert mehr Setup und kann die Lesbarkeit von Tests erschweren
• Kann bei unsachgemäßer Verwendung zu fragilen Tests führen
Mock vs. Stub: Welches sollten Sie verwenden?
• Wenn Ihr Test von der Ausgabe einer Abhängigkeit abhängt und Sie diese Ausgabe steuern möchten, verwenden Sie einen Stub.
• Wenn Sie überprüfen müssen, ob eine Methode aufgerufen wurde, oder Interaktionen zwischen Komponenten validieren müssen, verwenden Sie einen Mock.
• Für Unit-Tests werden Stubs häufiger verwendet, da der Schwerpunkt auf dem Testen der internen Logik liegt.
• Für Integrationstests sind Mocks nützlicher, um zu überprüfen, wie verschiedene Teile des Systems interagieren.

Abschluss
Sowohl Mocks als auch Stubs spielen eine wesentliche Rolle bei Teststrategien, dienen jedoch jeweils einem anderen Zweck. Während Stubs die von einer Abhängigkeit zurückgegebenen Daten steuern, stellen Mocks sicher, dass die richtigen Interaktionen zwischen Komponenten stattfinden. Wenn Sie wissen, wann und wie Sie die einzelnen Funktionen verwenden, können Sie die Qualität Ihrer Tests verbessern und zu zuverlässigerer Software führen. Durch die korrekte Anwendung von Mocks und Stubs können Teams Fehler reduzieren, die Entwicklung beschleunigen und bessere Teststrategien für Unit- und Integrationstests entwickeln.

Freigabeerklärung Dieser Artikel ist reproduziert unter: https://dev.to/ke-splage/mock-vs-stub-vereting-the-y-diffeferences-1e36?1 Wenn es zu Verstößen vorliegt, wenden Sie sich bitte an [email protected], um ihn zu löschen.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3