Sollte ich Integrationstest oder Komponententest schreiben?

7

Ich habe eine Funktion, die Fotos speichert (gespeichert in der Datenbank, App gibt Benutzeroption, in einem Verzeichnis zu speichern) zu einem bestimmten Verzeichnis.Now, das hat nicht richtig funktioniert.Ich habe es gerade behoben.Jetzt sollte ich Komponententest schreiben oder Integrationstest für die Funktion?

    
junky_user 04.01.2010, 10:10
quelle

5 Antworten

17

Für Ihren Fall möchten Sie einen Integrationstest schreiben, um das von Ihnen genannte Szenario zu erfassen. Ich habe einen vollständigen Beitrag zu diesem Thema . Hier ist jedoch eine zusammengefasste Version speziell für Ihre Frage:

In seinem Buch Die Kunst der Unit Testing beschreibt Roy Osherove ein Schlüsselprinzip, dass ein Unit-Test "vertrauenswürdig" sein muss. Auf der Oberfläche scheint dies ziemlich offensichtlich. In diesem Hintergrund werden jedoch einige der Hauptunterschiede zwischen einem Komponententest und einem Integrationstest hervorgehoben.

Bei einem vertrauenswürdigen Test müssen Sie den Ergebnissen zu 100% vertrauen können. Wenn der Test fehlschlägt, möchten Sie sicher sein, dass der Code defekt ist und behoben werden muss. Sie sollten nicht Dinge wie "War die Datenbank heruntergefahren?", "War die Verbindungszeichenfolge OK?", "Wurde die gespeicherte Prozedur geändert?" Wenn Sie diese Fragen stellen, zeigt sich, dass Sie nicht in der Lage sind, den Ergebnissen zu trauen, und Sie haben wahrscheinlich einen schlecht konzipierten "Komponententest".

Da Ihr Szenario eine Situation mit ähnlichen Mehrfachabhängigkeiten beschreibt, möchten Sie diese mit einem Integrationstest abdecken. Noch einmal, für weitere Details, siehe meine volle post hier auch .

Viel Glück!

    
Chris Melinn 04.01.2010, 10:36
quelle
8

Integrationstests und Komponententests haben unterschiedliche Bereiche und Zwecke:

  • Komponententests testen kleine Codeabschnitte (wie eine Funktion) isoliert vom Rest des Programms und decken im Idealfall alle möglichen Kantenfälle ab (wie Ausnahmen, Nullparameter usw.)
  • Integrationstests testen eine gesamte Anwendung aus Sicht des Anwendungsfalles. Sie können niemals alle Kantenfälle abdecken, aber sie können Probleme mit der Interaktion zwischen Teilen des Codes und dem Klebecode bekommen, der sie zusammenfügt, was Unit-Tests häufig vermissen

Für eine einzelne Funktion können Sie wirklich nur einen Komponententest haben, und Sie sollten. Sie können aber auch einen Integrationstest durchführen, der anzeigt, dass wenn ein Benutzer eine bestimmte Schaltfläche drückt, ein Foto in das Verzeichnis geschrieben und auch im Programm geöffnet werden kann.

    
Michael Borgwardt 04.01.2010 10:18
quelle
5
  • Integrationstests helfen Ihnen, zu validieren, wenn Ihre Software richtig funktioniert .
  • Komponententests helfen Ihnen, warum Ihre Software breaking zu finden.

Unit-Tests tragen in gewissem Maße auch zum ersten Ziel bei. Plus es hat ein paar Vorteile:

  • Es ist im Allgemeinen viel billiger zu schreiben und run einen Komponententest mit einem viel kleineren Umfang.
  • Es ist einfacher, Abdeckung für die kombinatorische Explosion von Zuständen Ihrer Komponenten mit Unit-Tests als ein Integrationstest zu erhalten. Angenommen, Sie haben ein Setup mit drei Komponenten. Jeder von ihnen hat 3 verschiedene Zustände. Dann würde eine Integrationsprüfung des gesamten Setups die Überprüfung von 3 * 3 * 3 = 27 Bedingungen beinhalten. Das Testen der einzelnen Komponenten erfordert das Testen von 3 + 3 + 3 = 9 Bedingungen. (Dies ist zu stark vereinfacht, aber Sie werden den Punkt hoffentlich sehen.)

Aus diesem Grund sind Komponententests im Allgemeinen beliebter als Integrationstests. Auf Integrationstests kann jedoch wirklich nicht verzichtet werden. Integrationstests sollten der Grundstein für die Akzeptanz Ihrer Software sein. Nur Unit-Tests haben bewiesen, dass Sie eine Menge Sachen haben, die etwas tun. Ein Integrationstest beweist, dass Sie funktionierende Software haben.

    
Wilfred Springer 10.05.2010 06:26
quelle
1

Einige Leute würden einen Test für einen DAO einen Integrationstest nennen; andere würden sagen, es ist ein Komponententest.

Wie auch immer Sie es nennen, ich würde sagen, Sie sollten einen Komponententest für alle DAO-Funktionen und einen Integrationstest für das Front-to-Back-Verhalten im Anwendungsfall haben, der besagt, dem Benutzer die Option zum Speichern zu geben in das Dateisystem. " Ich würde Integrationstests für beide Szenarien haben, da es klingt, als wären beide in Ihrem System möglich.

    
duffymo 04.01.2010 10:33
quelle
1

Ich denke, es hängt von der Quelle Ihres Problems ab. Wenn die Funktion selbst in verschiedenen Szenarien Probleme aufweist, können Sie Komponententests durchführen, um diese Szenarien über Ihre Funktion zu testen. Wenn die Integration Ihrer Funktion und anderer Teile Ihres Programms zu Problemen führen kann, sollten Sie an einen Integrationstest denken. Manchmal benötigt eine Funktion wie Ihre möglicherweise einige externe Ressourcen, um ihre Aufgabe zu erledigen. Es ist keine schlechte Idee, einige Komponententests zu haben, um zu sehen, was passiert, wenn einige dieser Ressourcen nicht verfügbar sind.

    
Beatles1692 04.01.2010 10:38
quelle

Tags und Links