web-dev-qa-db-ger.com

Was ist der Unterschied zwischen Unit-Tests und Integrationstests?

Was ist der Unterschied zwischen Unit-Tests und Integrationstests?

Gibt es unterschiedliche Namen für diese Tests? Wie manche Leute, die Unit-Tests, Funktionstests usw. nennen?

356
Books

Ein Komponententest ist ein Test, der vom Programmierer geschrieben wurde, um zu überprüfen, ob ein relativ kleiner Teil des Codes das tut, was er tun soll. Ihr Umfang ist eng, sie sollten leicht zu schreiben und auszuführen sein, und ihre Wirksamkeit hängt davon ab, was der Programmierer als nützlich erachtet. Die Tests sind für die Verwendung durch den Programmierer gedacht. Sie sind für niemanden direkt nützlich. Wenn sie jedoch ihre Arbeit erledigen, sollten Tester und nachgeschaltete Benutzer davon profitieren, dass weniger Fehler auftreten.

Ein Teil eines Komponententests ist die Implikation, dass Dinge außerhalb des zu testenden Codes verspottet oder ausgeblendet werden. Unit-Tests sollten keine Abhängigkeiten zu externen Systemen aufweisen. Sie testen die interne Konsistenz, anstatt zu beweisen, dass sie gut mit einem externen System umgehen.

Ein Integrationstest wird durchgeführt, um zu demonstrieren, dass verschiedene Teile des Systems zusammenarbeiten. Integrationstests können ganze Anwendungen abdecken und erfordern viel mehr Aufwand beim Zusammenstellen. Sie erfordern normalerweise die Zuweisung von Ressourcen wie Datenbankinstanzen und Hardware. Die Integrationstests demonstrieren die Funktionsweise des Systems überzeugender (insbesondere für Nicht-Programmierer) als eine Reihe von Komponententests, zumindest in dem Maße, in dem die Umgebung für Integrationstests der Produktion ähnelt.

Eigentlich wird "Integrationstest" für eine Vielzahl von Dingen verwendet, angefangen von vollständigen Systemtests in einer Umgebung, die der Produktion ähnelt, bis hin zu Tests, die eine Ressource (wie eine Datenbank oder eine Warteschlange) verwenden, die nicht verspottet ist. Am unteren Ende des Spektrums könnte ein Integrationstest ein Junit-Test sein, bei dem ein Repository gegen eine speicherinterne Datenbank ausgeführt wird. Am oberen Ende könnte es sich um einen Systemtest handeln, bei dem überprüft wird, ob Anwendungen Nachrichten austauschen können.

560
Nathan Hughes

Ein Komponententest sollte keine Abhängigkeiten von Code außerhalb des getesteten Komponententests aufweisen. Sie entscheiden, was das Gerät ist, indem Sie nach dem kleinsten prüfbaren Teil suchen. Wo Abhängigkeiten bestehen, sollten sie durch falsche Objekte ersetzt werden. Mocks, Stubs .. Der Testausführungsthread beginnt und endet innerhalb der kleinsten testbaren Einheit.

Wenn falsche Objekte durch echte Objekte ersetzt werden und der Testausführungsthread in andere testbare Einheiten übergeht, wird ein Integrationstest durchgeführt

90
Dave

Ein Komponententest wird (soweit möglich) in totaler Isolation durchgeführt.

Ein Integrationstest wird durchgeführt, wenn das getestete Objekt oder Modul mit anderen Codebits so arbeitet, wie es sein sollte.

40

Ein Komponententest testet Code, über den Sie die vollständige Kontrolle haben, während ein Integrationstest testet, wie Ihr Code anderen Code verwendet oder mit diesem "integriert".

Sie schreiben also Komponententests, um sicherzustellen, dass Ihre eigenen Bibliotheken wie vorgesehen funktionieren, und schreiben dann Integrationstests, um sicherzustellen, dass Ihr Code gut mit anderem Code zusammenarbeitet, den Sie verwenden, beispielsweise mit einer Bibliothek.

Funktionstests beziehen sich auf Integrationstests, beziehen sich jedoch insbesondere auf Tests, die ein gesamtes System oder eine Anwendung testen, wobei der gesamte Code zusammen ausgeführt wird, was beinahe ein Super-Integrationstest ist.

15
Karl Rosaen

Der Komponententest wird normalerweise für eine einzelne Funktionalität durchgeführt, die im Softwaremodul implementiert ist. Der Testumfang liegt vollständig innerhalb dieses SW-Moduls. Der Komponententest erfüllt niemals die endgültigen funktionalen Anforderungen. Es fällt unter die Whitebox-Testmethode.

Der Integrationstest wird durchgeführt, um die verschiedenen Implementierungen des SW-Moduls sicherzustellen. Die Tests werden normalerweise nach der Integration auf Modulebene in die SW-Entwicklung durchgeführt. Dieser Test deckt die funktionalen Anforderungen ab, reicht jedoch nicht aus, um die Systemvalidierung sicherzustellen.

11
Jeganraj