Unit Testing bezieht sich auf was Sie testen, TDD zu , wenn Sie testen.
Die beiden sind orthogonal.
Unit Testing bedeutet, einzelne Verhaltenseinheiten zu testen. Eine einzelne Verhaltenseinheit ist die kleinstmögliche Verhaltenseinheit, die einzeln für sich getestet werden kann. (Ich weiß, dass diese beiden Definitionen zirkulär sind, aber sie scheinen in der Praxis recht gut zu funktionieren.)
Sie können Komponententests schreiben, bevor Sie Ihren Code schreiben, nachdem Sie Ihren Code geschrieben haben oder während Sie Ihren Code schreiben.
TDD bedeutet (wie gesagt), dass Sie Ihre Tests Ihre Entwicklung (und Ihr Design) vorantreiben lassen. Das können Sie mit Unit-Tests, Funktionstests und Abnahmetests machen. Normalerweise verwenden Sie alle drei.
Der wichtigste Teil von TDD ist die mittleren D . Sie lassen sich von den Tests fahren . In den Tests erfahren Sie, was zu tun ist, was als Nächstes zu tun ist, wenn Sie fertig sind. Sie sagen Ihnen, was die API sein wird, was das Design ist. (Dies ist wichtig: Bei TDD geht es nicht darum, zuerst Tests zu schreiben. Es gibt viele Projekte, die zuerst Tests schreiben, aber nicht TDD üben. Das Schreiben von Tests als Erstes ist lediglich eine Voraussetzung dafür, dass die Tests die Entwicklung vorantreiben können.)
Unit Testing ist eine Komponente von Test Driven Development
Sie können Komponententests durchführen, ohne eine testgetriebene Entwicklung durchzuführen. Sie können jedoch keine testgetriebene Entwicklung ohne Unit-Tests durchführen.
Wenn Sie herkömmliche Komponententests durchführen , schreiben Sie einen Test, nachdem Sie Ihren Code geschrieben haben.
Testgetriebener Entwicklungsansatz ist das Schreiben von Unit-Tests vor dem Schreiben von Code.
Die interessantesten Vorteile von TDD (IMHO) im Vergleich zu einfachen Unit-Tests:
quelle
TDD und Unit Testing sind zwei sehr spezifische Begriffe, die häufig missbraucht werden.
TDD schreibt einen Test, der fehlschlägt, und schreibt dann die Mindestmenge an Code, die für die Ausführung erforderlich ist. Anschließend wird der Code überarbeitet, um ihn sauber zu machen. Dies geschieht in Zyklen, Fail -> Pass -> Refactor, wobei für jede bekannte Anforderung des Codes ein neuer Test hinzugefügt wird. In jüngerer Zeit hat sich TDD noch genauer mit dem Schreiben von Einheitentests in diesem Zyklus befasst, um es von ATDD (einer Teilmenge von BDD) zu unterscheiden, die Akzeptanztests in einem ähnlichen Zyklus schreibt.
Beim Unit Testing wird ein Code in kleinen, isolierten Einheiten getestet. Die allgemeine Verwirrung besteht darin, dass Sie, wenn Sie ein Unit-Test-Tool wie xUnit oder Rspec verwenden, Tests ausführen, für die Sie Unit-Tests schreiben. Dies ist nicht unbedingt wahr. Mit diesen Tools können beispielsweise Tests mit dem Selenium-Framework ausgeführt werden. In diesem Fall schreiben Sie Akzeptanztests mit einem Unit-Test-Runner. Unit-Tests sind sehr spezifische Tests, die sich auf ein kleines Stück Logik konzentrieren, das aus Gründen der Geschwindigkeit von allem anderen isoliert ist (sodass Sie sie häufig ausführen und schnelles Feedback zu neuen Fehlern erhalten können).
quelle
TDD ist der Ansatz, die Testfälle vor der Entwicklung zu schreiben, wie Sie sagten, und dann schreibt der Entwickler den Code, um die Testfälle zu bestehen. Unit Testing ist ein Begriff, mit dem ein Test mit engem Geltungsbereich beschrieben wird, der sich von Systemtests, Integrationstests und Abnahmetests unterscheidet.
quelle
TDD ist ein philosophischer Ansatz zum Schreiben von Code: Schreiben Sie zuerst die Tests. Die Tests, die Sie schreiben, sind Komponententests.
quelle
Die Art und Weise, wie ich die beiden voneinander trenne, besteht darin, zu berücksichtigen, dass es bei TDD weniger um das Testen als um das Entwerfen des Codes geht. Unit-Tests werden dann verwendet, um die Erwartungen für den Endcode festzulegen. Wenn der Endcode geschrieben ist und Tests (Spezifikationen) besteht, verfügen Sie über Code, der mithilfe von Tests erstellt wurde.
quelle
Alles hervorragende Antworten. Ich möchte nur hinzufügen, dass Unit-Tests dazu tendieren, die "Unit" als kleine Komponente zu betrachten, während TDD auf Integrations- und Akzeptanztests hochskaliert.
(Einige TDD-Varianten betrachten die 'Einheit' als den kleinsten inkrementellen Schritt in Richtung der gewünschten Funktionalität ...)
quelle