Frage

Ich hatte gerade ein Gespräch mit meinem lead-Entwickler, der widersprach, dass unit-tests sind alles, was notwendig oder wichtig sind.In seiner Ansicht, funktionale tests mit einer ausreichend hohen Codeabdeckung sollte genug sein, da jede innere refactorings (interface-änderungen, etc.) wird nicht dazu führen, dass die tests gebraucht werden, umgeschrieben oder schaute immer wieder.

Ich habe versucht zu erklären, aber nicht sehr weit, und dachte, Euch könnte es besser machen.;-) So...

Was sind einige gute Gründe, um unit-test-code, funktionale tests nicht bieten?Welche Gefahren gibt es, wenn alle Sie haben, sind funktionale tests?

Bearbeiten #1 Danke für all die tollen Antworten.Ich wollte noch hinzufügen, dass durch funktionelle tests ich meine nicht nur die tests auf das gesamte Produkt, sondern auch tests zu den Modulen in die Produkt, nur nicht auf dem niedrigen Niveau eines unit-Tests mit mocking, wenn nötig, etc.Beachten Sie auch, dass unsere funktionalen tests werden automatisch und kontinuierlich laufen, aber Sie dauern länger als unit-tests (die ist einer der großen Vorteile von unit-tests).

Ich mag die Ziegel vs.Haus Beispiel.Ich denke, was meine leitende Entwickler sagt, ist das testen der Wände des Hauses ist genug, Sie nicht brauchen, um zu testen die einzelnen Steine...:-)

War es hilfreich?

Lösung

Aus der Spitze von meinem Kopf

  • Unit-tests sind wiederholbar, ohne Aufwand.Schreiben Sie einmal, führen Sie Tausende von mal, keine menschliche Anstrengung erforderlich, und viel schneller feedback, als Sie von einem funktionalen test
  • Unit-tests testen, kleine Einheiten, so sofort den richtigen "Bereich", in dem der Fehler Auftritt.Funktionale tests zeigen Fehler, aber Sie kann werden verursacht durch viele Module, die auch in der Zusammenarbeit.
  • Ich würde kaum nennen-Schnittstelle ändern "eine innere Umgestaltung".Änderungen in der Benutzeroberfläche neigen zu brechen, eine große Menge code, und (meiner Meinung nach) Kraft, eine neue Schleife test lieber als gar keine.

Andere Tipps

unit-tests sind für den Entwickler, um zu sehen, wo der code fehlgeschlagen

funktionale tests sind für das Unternehmen, um zu sehen, ob der code das tut, was Sie gefragt, für

unit-tests sind für den Entwickler, um zu sehen, wo der code fehlgeschlagen

funktionale tests sind für das Unternehmen, um zu sehen, ob der code das tut, was Sie gefragt, für

unit-tests prüfen, die Sie bisher gefertigt haben Sie Ihre Steine richtig

funktionale tests prüfen, dass das Haus erfüllt die Bedürfnisse der Kunden.

Sie sind verschiedene Dinge, aber der letztere wird viel einfacher sein, wenn der ehemalige durchgeführt wurde.

Es kann sehr viel schwieriger zu finden die Quelle von Problemen, wenn ein Funktionstest fehlschlägt, weil Sie tatsächlich die Prüfung der gesamten codebase-jedes mal.Durch Kontrast, unit-tests aufteilen der potenzielle Problembereiche.Wenn alle anderen unit-tests erfolgreich sein, aber diese ein, Sie haben die Zusicherung, dass das problem in dem code, den Sie testen wollen und nicht anderswo.

Bugs sollten gefangen werden so schnell wie möglich in die Entwicklung Zyklus - mit bugs zu bewegen, von design, code, oder den code zu testen, oder (hoffentlich nicht) test, um die Produktion steigt, die Kosten und Zeit, die erforderlich ist, um es zu beheben.

Unser shop erzwingt unit-Test schon allein aus diesem Grund (ich bin sicher, es gibt andere Gründe, aber das ist genug für uns).

Wenn Sie eine pure Extreme programming / Agile Entwicklung, die Methodik der Unit tests sind immer erforderlich, da Sie die Anforderungen für die Entwicklung.

In reiner XP/Agile einer macht, die allen Anforderungen auf der Grundlage der tests, die durchgeführt werden, um die Anwendung

  • Funktionale tests Generieren von funktionalen Anforderungen.
  • Unit-tests Generieren von Funktionen oder Objekt-Anforderungen.

Andere als, dass Unit-Tests können verwendet werden, um halten eine anhaltende Spur von Funktions Anforderungen.

d.h. Wenn Sie ändern müssen die Arbeits-Weise eine Funktion, aber die Eingabefelder ein-und Ausgang, bleiben davon unberührt.Dann unit-Tests ist der beste Weg zu halten die Verfolgung der möglichen Probleme, wie Sie nur brauchen, um die tests auszuführen.

In TDD/BDD, unit-tests sind notwendig, um das Programm zu schreiben.Der Prozess geht

andernfalls test -> code -> das bestehen der Prüfung -> refactor -> wiederholen

Die verlinkten Artikel erwähnt auch die Vorteile von TDD/BDD.In der Zusammenfassung:

  • Kommt dem sehr nahe, wodurch die Verwendung eines Debuggers (ich verwende nur in tests jetzt und sehr selten für diese)
  • Code kann nicht bleiben messy länger als ein paar Minuten
  • Dokumentation Beispiele für eine API, built-in
  • Kräfte lose Kopplung

Der link hat auch eine (dumme)-walk-through Beispiel von TDD/BDD, aber es ist in PowerPoint (ew), so hier's eine html-version.

Ausgehen für eine Sekunde, dass Sie bereits haben eine Gründliche Reihe von Funktionstests, kontrollieren Sie jeden möglichen Anwendungsfall zur Verfügung und Sie erwägen, das hinzufügen von unit-tests.Denn die funktionale tests, wird fangen alle mögliche bugs, die unit-tests werden nicht helfen, fangen bugs.Es gibt jedoch einige Kompromisse zur Verwendung von funktionellen tests ausschließlich im Vergleich zu einer Kombination von unit-tests, integration-tests und funktionale tests.

  • Unit-tests schneller ausgeführt werden.Wenn Sie jemals gearbeitet haben an einem großen Projekt, wo die test-suite Stunden dauert, zu laufen, können Sie schnell verstehen, warum tests so wichtig sind.
  • In meiner Erfahrung, die praktisch gesehen, funktionale tests sind eher flockig.Manchmal ist zum Beispiel der kopflose capybara-webkit-browser kann einfach nicht erreichen Ihre test-server für einige Grund, Sie jedoch erneut ausführen, und es funktioniert gut.
  • Unit-tests sind einfacher zu Debuggen.Unter der Annahme, dass der unit-test gefangen hat einen Fehler, es ist einfacher und schneller, um festzustellen, wo genau das problem ist.

Auf der anderen Seite, wenn Sie entscheiden, nur halten Sie Ihre funktionale tests und nicht fügen Sie alle unit-tests

  • Wenn Sie jemals brauchen, um re-Architekt das gesamte system, Sie dürfen nicht haben zu umschreiben tests.Wenn Sie unit-tests, viele von Ihnen werden wahrscheinlich gelöscht oder umgeschrieben.
  • Wenn Sie jemals brauchen, um re-architect das ganze system, werden Sie nicht haben, um sorgen über Regressionen.Wenn Sie stützte sich auf unit-tests abdecken Ecke zu Fällen, aber Sie waren gezwungen, zu löschen oder umschreiben, diese unit-tests, Ihre neue unit-tests sind eher zu Fehlern in Ihnen als die alte unit-tests.
  • Nachdem Sie bereits die funktionale Testumgebung eingerichtet und Sie bekommen haben, über die Lernkurve, schreiben die zusätzliche funktionale tests ist oft einfacher zu schreiben und zu oft einfacher, richtig zu schreiben, als eine Kombination von unit-tests, integration-tests und funktionale tests.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top