Verwenden Integrationstests Mocks?

24

Ich bin derzeit in einer Klasse für Softwaretests, in der wir für unser Semesterprojekt mehrere Testarten durchführen müssen, wie z. B. Komponententests und Integrationstests. Für den Integrationstest verwendete der Professor angeblich Mocks und Spottbibliotheken (wie EasyMock und Mockito) für unseren Integrationstest. Ich bin allerdings ziemlich verwirrt. Integrationstests sind Tests außerhalb von Klassen, Modulen, Diensten usw. Warum sollten Mocks und Stubs für Integrationstests geeignet sein, wenn Sie mehrere Klassen und Dienste testen?

TheLegendOfCode
quelle
8
"Integration" - und "Unit" -Tests sind nicht allgemein vereinbart. Fragen Sie Ihren Professor am besten genau, wie diese Begriffe definiert wurden.
RubberDuck
1
Nur ein Kommentar. Beim Integrationstest geht es nicht darum, die Abhängigkeiten zu testen. Es geht darum, die richtige Integration des Codes in die Abhängigkeiten (die Aufrufe, die Antwort und die Fehlerbehandlung usw.) zu testen.
Laiv

Antworten:

25

Wenn Sie eine Funktion haben, die mehrere externe Komponenten berührt, können Sie alle außer einer verspotten, um eine bestimmte Komponente zu isolieren und zu testen. Angenommen, Sie haben eine Funktion, die einen Webdienst aufruft und dann basierend auf den Ergebnissen eine Aktion mit einer Datenbank ausführt. Sie könnten drei Integrationstests schreiben:

  1. Ein Test, der den Webservice-Aufruf nachahmt, aber eine echte Datenbankkonnektivität beinhaltet.
  2. Ein Test, der einen echten Webservice-Aufruf durchführt, jedoch eine falsche Datenbankkonnektivität verwendet.
  3. Ein Test, der einen echten Webservice-Aufruf durchführt und eine echte Datenbankverbindung beinhaltet.

Wenn Sie alle drei Tests ausführen und 1 und 3 fehlschlagen, besteht eine gute Chance, dass in Ihrem Code ein Fehler vorliegt, der mit der Datenbank funktioniert, da der einzige bestandene Test der Test war, der die Schein-Datenbank-Konnektivität verwendet.

Im Allgemeinen werden bei Integrationstests keine Mocks verwendet, aber ich habe gelegentlich so etwas getan.

FrustratedWithFormsDesigner
quelle