it-swarm-eu.dev

Unterschied zwischen Unit Testing und Test Driven Development

Aus dem Lesen der Beschreibungen geht hervor, dass TDD-Tests vor dem Schreiben der Funktion und Unit-Tests nach dem Schreiben durchgeführt werden.

Ist dies der Hauptunterschied oder können die beiden Begriffe nicht einmal als solche verglichen werden? Möglicherweise ist Unit Testing ein integraler Bestandteil von TDD.

66
Shamim Hafiz

nit Testing bezieht sich auf was Sie testen, TDD auf wann Sie testen.

Die beiden sind orthogonal.

Unit Testing bedeutet, einzelne Verhaltenseinheiten zu testen. Eine einzelne Verhaltenseinheit ist die kleinstmögliche Verhaltenseinheit, die einzeln isoliert 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 (wieder offensichtlich), dass Ihre Tests Ihre Entwicklung (und Ihr Design) vorantreiben. Dies können Sie mit Unit-Tests, Funktionstests und Abnahmetests tun. Normalerweise verwenden Sie alle drei.

Der wichtigste Teil von TDD ist die Mitte D . Sie lassen die Tests fahren Sie. Die Tests zeigen Ihnen, 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 TDD nicht üben. Das Schreiben von Tests zuerst ist einfach eine Voraussetzung dafür, dass die Tests die Entwicklung vorantreiben können.)

107
Jörg W Mittag

Unit Testing ist ein Bestandteil der Test Driven Development

Sie können Unit-Tests durchführen, ohne eine testgetriebene Entwicklung durchzuführen. Sie können jedoch keine testgetriebene Entwicklung durchführen, ohne Unit-Tests zu verwenden.

Wenn Sie traditionelle Unit-Tests durchführen, schreiben Sie Test , nachdem Sie Ihre geschrieben haben Code.

Testgetriebener Entwicklungsansatz besteht darin, Unit-Test zu schreiben, bevor Code geschrieben wird.

Die interessantesten Vorteile von TDD (IMHO) im Vergleich zu einfachen Unit-Tests:

  • Code ist vollständig getesteter Code im Voraus. Es ist schmerzloses Testen.
  • Es zwingt Sie, Ihre Klassen richtig zu gestalten.
  • Es zwingt dich auch zu halte es einfach dumm .
  • Der Zyklus von Rot-Grün-Refaktor ist der absolute Aufschubkiller!
21
user2567

TDD und Unit Testing sind zwei sehr spezifische Begriffe, die häufig missbraucht werden.

TDD schreibt einen Test, der fehlschlägt, schreibt dann die Mindestmenge an Code, die für die Ausführung erforderlich ist, und überarbeitet dann den Code, um ihn sauber zu machen. Dies erfolgt in Zyklen, Fail -> Pass -> Refactor, wobei für jede bekannte Anforderung für den Code ein neuer Test hinzugefügt wird. In jüngerer Zeit hat sich TDD noch genauer mit dem Schreiben von Komponententests in diesem Zyklus befasst, um es von ATDD (einer Teilmenge von BDD) zu unterscheiden, die Akzeptanztests in einem ähnlichen Zyklus schreibt.

Beim Testen von Einheiten geht es darum, einen Code in kleinen, isolierten Einheiten zu testen. Die häufigste Verwirrung besteht darin, dass Sie Unit-Tests schreiben, wenn Sie ein Unit-Test-Tool wie xUnit oder Rspec verwenden, um Tests auszuführen. Dies ist nicht unbedingt wahr. Mit diesen Tools können beispielsweise Tests mit dem Selenium-Framework ausgeführt werden. In diesem Fall schreiben Sie Abnahmetests mit einem Unit-Test-Runner. Unit-Tests sind sehr spezielle Tests, die sich auf ein kleines Stück Logik konzentrieren, das aus Gründen der Geschwindigkeit von allem anderen isoliert ist (damit Sie sie häufig ausführen und schnelles Feedback zu neuen Fehlern erhalten können).

13
pdr

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, der verwendet wird, um eine andere Art von Tests mit engen Bereichen als Systemtests, Integrationstests und Abnahmetests zu beschreiben.

6
M.Sameer

TDD ist ein philosophischer Ansatz zum Schreiben von Code: Schreiben Sie zuerst die Tests. Die Tests, die Sie schreiben, sind Komponententests.

3
Tangurena

Alles ausgezeichnete Antworten. Ich möchte nur hinzufügen, dass Unit-Tests dazu neigen, die "Unit" als kleine Komponente zu betrachten, während TDD um Integrations- und Abnahmetests erweitert wird.

(Einige TDD-Varianten betrachten die 'Einheit' als den kleinsten inkrementellen Schritt in Richtung der gewünschten Funktionalität ...)

1
Steven A. Lowe

Die Art und Weise, wie ich die beiden trenne, besteht darin, zu berücksichtigen, dass es bei TDD weniger um das Testen als vielmehr 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, haben Sie Code, der mithilfe von Tests entworfen wurde.

1
Grant Palin