Lohnt sich ein Unit-Test oder eine testgetriebene Entwicklung?

48

Mein Team bei der Arbeit wechselt zu Scrum, und andere Teams beginnen mit der testgetriebenen Entwicklung mithilfe von Komponententests und Benutzerakzeptanztests. Ich mag die UATs, aber ich bin nicht für Unit-Tests für testgetriebene Entwicklung oder testgetriebene Entwicklung im Allgemeinen verkauft.

Es scheint, als ob das Schreiben von Tests zusätzliche Arbeit ist, den Leuten eine Krücke gibt, wenn sie den richtigen Code schreiben, und möglicherweise nicht sehr oft effektiv ist.

Ich verstehe, wie Unit-Tests funktionieren und wie man sie schreibt, aber kann irgendjemand den Fall vertreten, dass es wirklich eine gute Idee ist und sich die Mühe und Zeit lohnt?

Gibt es auch irgendetwas, das TDD besonders gut für Scrum macht?

Owen Johnson
quelle
27
Wenn Sie sicherstellen möchten, dass Ihre Software häufig ausfällt, praktisch nicht mehr gewartet werden kann und ersetzt werden muss, bevor sie tatsächlich produktionsbereit ist; Dann würde ich vorschlagen, dass Sie ganz auf Unit-Tests verzichten und sich nie die Zeit nehmen, TDD zu lernen.
Dawood ibn Kareem
3
Denken Sie über den Wunsch / Bedarf nach einem Refactor nach. Wären Sie sicherer, das Refactoring (in beliebiger Größenordnung) mit oder ohne umfassende Komponententests durchzuführen, um Sie zu ermitteln, wenn Sie versehentlich etwas kaputt gemacht haben?
Marjan Venema
2
"Gibt Leuten eine Krücke, wenn sie echten Code schreiben"? Können die meisten Best Practices nicht so beschrieben werden?
user16764
4
@DavidWallace: Dies ist das Problem inkompetenter Entwickler, nicht ein Mangel an TDD. Selbst wenn TDD ausgiebig genutzt wird, gibt es keine Garantie dafür, dass die vorgenommene Änderung nichts kaputt macht.
Coder
6
@NimChimpsky: Ich habe keine negative Einstellung zu TDD, ich folge einfach nicht dem Hype. Es hat sowohl positive als auch negative Seiten. Falsches Sicherheitsgefühl ist einer von ihnen.
Coder

Antworten:

68

Kurze Antwort: Absolut positiv.

Lange Antwort: Unit Tests sind eine der wichtigsten Methoden, die ich an meinem Arbeitsplatz (große Bank, Devisenhandel) zu beeinflussen versuche. Ja, sie sind zusätzliche Arbeit, aber es ist Arbeit, die sich immer wieder auszahlt. Automatisierte Komponententests helfen Ihnen nicht nur dabei, den von Ihnen geschriebenen Code tatsächlich auszuführen und Ihre Erwartungen zu überprüfen, sondern sie dienen auch als eine Art Wachhund für zukünftige Änderungen, die Sie oder jemand anderes möglicherweise vornehmen. Ein Testbruch tritt auf, wenn jemand den Code auf unerwünschte Weise ändert. Ich denke, der relative Wert von Komponententests nimmt in Abhängigkeit von der erwarteten Änderung und dem Wachstum einer Codebasis ab, aber die anfängliche Überprüfung, was der Code bewirkt, macht es auch dann sinnvoll, wenn die erwartete Änderung gering ist. Der Einheitstestwert hängt auch von den Kosten der Mängel ab. Wenn die Kosten (bei denen die Kosten Zeit- / Geld- / Reputationsverlust / zukünftiger Aufwand sind) eines Fehlers Null sind, ist auch der relative Wert eines Tests Null. Dies ist jedoch in einem kommerziellen Umfeld fast nie der Fall.

Wir stellen im Allgemeinen keine Mitarbeiter mehr ein, die im Rahmen ihrer Arbeit nicht routinemäßig Komponententests erstellen - das ist nur etwas, was wir erwarten, zum Beispiel, dass wir jeden Tag auftauchen. Ich habe keine reine Kosten-Nutzen-Analyse von Komponententests gesehen (jemand kann mich gerne auf eine verweisen), aber ich kann aus Erfahrung sagen, dass es sich in einem kommerziellen Umfeld lohnt, zu beweisen, dass Code in einem großen wichtigen System funktioniert . Außerdem kann ich nachts besser schlafen, wenn ich weiß, dass der von mir geschriebene Code nachweislich funktioniert (bis zu einem bestimmten Grad). Wenn er sich ändert, wird jemand durch eine fehlerhafte Version auf unerwartete Nebenwirkungen aufmerksam gemacht.

Testgetriebene Entwicklung ist in meinen Augen kein Testansatz. Tatsächlich handelt es sich um einen Entwurfsansatz / eine Entwurfspraxis, bei der die Ausgabe das Arbeitssystem und eine Reihe von Komponententests ist. Ich bin weniger religiös in Bezug auf diese Praxis, da es schwierig ist, sie zu entwickeln und zu perfektionieren. Persönlich, wenn ich ein System baue und keine klare Vorstellung davon habe, wie es funktionieren wird, werde ich TDD einsetzen, um mich im Dunkeln zurechtzufinden. Wenn ich jedoch ein vorhandenes Muster / eine vorhandene Lösung anwende, wird dies in der Regel nicht der Fall sein.

Da Sie keinen mathematischen Beweis dafür haben, dass das Schreiben von Komponententests sinnvoll ist, empfehle ich Ihnen, es über einen längeren Zeitraum zu versuchen und die Vorteile selbst zu erleben.

Rupjones
quelle
5
Was ich hinzufügen möchte, ist, dass Unit-Tests Sie auch über Ihr Schnittstellendesign nachdenken lassen. Wenn Sie zu einem Teil kommen, in dem Sie denken, "Wie teste ich private Methoden?", Wissen Sie, dass wahrscheinlich Ihre Schnittstelle falsch ist.
TC1
1
"Ich ermutige Sie, es über einen längeren Zeitraum zu versuchen und die Vorteile selbst zu erleben." Es war genug für mich, es einmal zu versuchen, die Vorteile schienen offensichtlich.
NimChimpsky
1
+1 für "Wir stellen im Allgemeinen keine Mitarbeiter mehr ein, die im Rahmen ihrer Arbeit nicht routinemäßig Komponententests erstellen." Ich musste kürzlich einen Kandidaten ablehnen, der unter anderem stark proklamierte, dass er keine automatischen Tests schreiben möchte, weil sie Zeitverschwendung sind und er den Code selbst testen könnte.
21.
4
Sie können nicht beweisen, dass ein nicht-trivialer Code auf irgendeine relevante Weise funktioniert, indem Sie nur automatisierte Tests verwenden. Mit automatisierten Tests können Sie nur nachweisen, dass der Code die Tests besteht. Wenn die Tests 100% Ihrer Anwendungsfälle abdecken, haben Sie wahrscheinlich Ihr "bestimmtes Niveau", aber das bedeutet noch immer nicht, dass der Code "nachweislich funktioniert". Um wirklich nachweisbar zu sein, benötigen Sie en.wikipedia.org/wiki/Formal_verification - als solches verwenden Sie hier den Ausdruck "nachweisbar", der falsch ist.
Vaxquis
1
@vaxquis ja, du hast absolut recht mit der verwendung des begriffs proof. Aber ich wette, dass das Vorhandensein von Tests (oder das Üben von TDD) ein besserer Beweis für ein funktionierendes System ist als das Fehlen von Tests.
Rupjones
16

Früher gefundene Fehler sind kostengünstiger zu beheben als später gefundene Fehler. Mit TDD können Sie die Richtigkeit Ihres Systems überprüfen. Sie investieren ein bisschen mehr im Voraus, bekommen es aber später zurück. Das Diagramm ist etwas übertrieben, aber es zeigt die Idee gut.

Bildbeschreibung hier eingeben

Bildquelle

Martin Wickman
quelle
Was meinst du mit traditionell ? Alles was nicht TDD ist?
Giorgio
Es scheint, dass diese Grafik nicht auf echten Statistiken basiert, sondern nur die Erfahrung einer einzelnen Person darstellt, die diesen Blog-Eintrag im Jahr 2006 geschrieben hat.
Doc Brown
9

Lohnt sich ein Unit-Test oder eine testgetriebene Entwicklung?

Ja, das tut es . Onkel Bob (Robert C Martin) erzählte in einer Präsentation;

Damit ein Entwickler beweisen kann, dass sein Code besser funktioniert, um einen Test zu schreiben und zu bestehen, muss er nicht schreien, singen oder darüber tanzen.

Und da Sie den Test nicht löschen werden, sind Sie sicher, dass die Funktionalität funktioniert - Regressionsprobleme sind gelöst.

Es gibt eine Menge Sachen darauf geschrieben,

  1. Sie sind dafür verantwortlich, dass diese Funktion funktioniert. Schreibe einen Test. TU es einfach.
  2. Wann sollten Unit-Tests durch Integrationstests ersetzt werden?

Stehen SCRUM, Unit Testing und TDD im Zusammenhang?

In Unit testingKürze , wenn Sie ein Meister sind, werden Sie in der Nähe sein TDD. SCRUM hat nichts damit zu tun, aber wie man sagt, lassen sich großartige Dinge gut mischen. Diese Techniken zur Entwicklung einer Software ergeben einen hervorragenden Stack , wenn Sie es noch nicht ausprobiert haben. Probieren Sie es aus.

Gibt es etwas, das TDD besonders gut für SCRUM macht?

Wie ich oben sagte, bilden sie eine gute Kombination ; Wenn Sie einige Automatisierungstests hinzufügen , ist dies etwas Besonderes .

ManuPK
quelle
8

Es scheint, als ob das Schreiben von Tests zusätzliche Arbeit ist, den Leuten eine Krücke gibt, wenn sie den richtigen Code schreiben, und möglicherweise nicht sehr oft effektiv ist.

Unit Testing hat als Krücke Wert. Es unterstützt Ihre Entwicklungsbemühungen und ermöglicht es Ihnen, Ihre Implementierung zu ändern, ohne befürchten zu müssen, dass Ihre Anwendung nicht mehr wie erforderlich funktioniert. Unit-Tests sind auch viel mehr als eine Krücke, denn sie bieten Ihnen ein Werkzeug, mit dem Sie überprüfen können, ob Ihre Implementierung den Anforderungen entspricht.

Alle Tests, ob Unit-Tests, Abnahmetests, Integrationstests usw., sind nur so effektiv wie die Personen, die sie verwenden. Wenn Sie sich mühsam Ihrer Arbeit nähern, werden Ihre Tests mühsam und Ihre Implementierung wird Probleme haben. Wieso sich die Mühe machen? Sie machen sich die Mühe zu testen, weil Sie sich und Ihren Kunden beweisen müssen, dass Ihre Software funktioniert, und keine Probleme haben, die die Verwendung der Software verhindern könnten. Ja, Tests sind definitiv zusätzliche Arbeit, aber wie Sie testen, wird bestimmen, wie viel Aufwand Sie für die Behebung von Fehlern nach der Veröffentlichung benötigen und wie viel Aufwand Ihr Code für Änderungen und Wartung erfordert.

Ich verstehe, wie Unit-Tests funktionieren und wie man sie schreibt, aber kann irgendjemand den Fall vertreten, dass es wirklich eine gute Idee ist und sich die Mühe und Zeit lohnt?

TDD und jede Methode, bei der Sie Tests schreiben müssen, bevor Sie Code schreiben, verwendet den Ansatz, den Sie frühzeitig als Anzahlung für zukünftige technische Schulden einsetzen. Während Sie das Projekt abarbeiten, wird alles, was übersehen wird oder nicht gut umgesetzt wird, eine größere technische Verschuldung in Form eines erhöhten Wartungsaufwands verursachen, was sich direkt auf die zukünftigen Kosten und die Ressourcenanforderungen auswirkt. Das Testen im Voraus stellt sicher, dass Sie nicht nur Anstrengungen unternommen haben, um zukünftige technische Schulden zu beheben, sondern auch, dass Sie Ihre Anforderungen so codieren, dass sie einfach durch Ausführen Ihres Codes überprüft werden können. Mit Test first haben Sie auch die Möglichkeit, Ihr Verständnis der Problemdomäne zu überprüfen, bevor Sie sich zur Lösung des Problems im Code verpflichten, und Ihre Implementierungsbemühungen zu überprüfen.

Es kommt wirklich darauf an, den Geschäftswert Ihres Codes zu maximieren. Code, der weitgehend ungetestet und schwer zu warten ist, ist im Allgemeinen billig und schnell zu erstellen und über die Lebensdauer des Produkts nach der Veröffentlichung sehr kostspielig zu warten. Die Erstellung von Code, der gründlich auf Geräteebene getestet wurde, ist in der Regel teurer, die Wartung über die gesamte Lebensdauer des Produkts nach der Veröffentlichung jedoch vergleichsweise kostengünstig.

Gibt es auch irgendetwas, das TDD besonders gut für SCRUM macht?

TDD eignet sich nicht speziell für eine bestimmte Methodik. Es ist einfach ein Werkzeug. Eine Praxis, die Sie in Ihre Entwicklungsprozesse integrieren können, um Ihre spezifischen Ergebnisse zu erzielen. Um Ihre Frage zu beantworten, ist TDD eine Ergänzung zu Ihrer Methode, sei es SCRUM oder ein anderer Ansatz.

S.Robins
quelle
6

Die Leute denken, es ist ein zusätzlicher Aufwand, weil es sich um eine Vor-Ort-Aktivität handelt. Was Sie in der Zeit verlieren, gewinnen Sie später wieder zurück.

Meine Gründe für Unit-Tests sind auch:

Gibt Ihnen ein Ziel: Sie können keinen Test schreiben, wenn Sie nicht wissen, was die Software tun soll. Dies hilft, Probleme in Spezifikationen eher früher als später auszumerzen.

Gibt Ihnen ein Gefühl des Fortschritts.

Warnt Sie, wenn eine Codeänderung die Ausgabe anderer Codebereiche ändert. Das erleichtert das Refactoring.

Bietet eine zusätzliche Dokumentationsebene (insbesondere, wenn Sie Ihre Tests ordnungsgemäß kommentieren).

Ermutigt alle Arten von guten Praktiken. Da Tests schnell ausgeführt werden sollten, sollten Sie entkoppelten Code schreiben, der das Verspotten unterstützt. Dies alles hilft beim Refactoring.

Es gibt auch andere, die in anderen Beiträgen in diesem Thread behandelt werden. Es lohnt sich.

Ian
quelle
2

Lohnt sich ein Unit-Test oder eine testgetriebene Entwicklung?

Auf jeden Fall ja (siehe die anderen Antworten)

[Ist es] wirklich eine gute Idee und die Mühe und Zeit wert?

  • Ja, wenn Sie etwas Neues starten (ein neues Modul oder eine völlig neue Anwendung hinzufügen)
  • Nein, wenn bereits viel Code vorhanden ist, der nicht testgetrieben entwickelt wurde und der erweitert werden muss (Legacy).

Meiner Meinung nach ist eine testgetriebene Entwicklung am effektivsten, wenn Sie die Komponententests vor dem eigentlichen Code schreiben . Auf diese Weise wird der Code, der die Tests erfüllt, mit einem Minimum an externen Referenzen, die leicht zu testen sind, klar getrennt.

Wenn der Code bereits ohne die dortigen Komponententests vorhanden ist, ist das anschließende Schreiben der Komponententests in der Regel sehr aufwändig, da der Code nicht für einfache Tests geschrieben wurde.

Wenn Sie TDD ausführen, ist der Code automatisch einfach zu testen.

k3b
quelle
2

Lassen Sie mich das von der anderen Seite angehen. Was passiert, wenn Sie eine nicht triviale Anwendung ohne Komponententests entwickeln? Wenn Sie eine gute QS-Abteilung haben, werden Sie als Erstes feststellen, dass Sie eine große Anzahl von gemeldeten Problemen haben. Warum, weil Sie nicht getestet haben, was Sie getan haben und angenommen haben, dass es funktionieren würde, und weil Sie den Anforderungen nicht so viel Aufmerksamkeit geschenkt haben und Ihre Anwendung sie nicht erfüllt. Hoppla, zurück zum Zeichenbrett, um es neu zu schreiben und zu reparieren. Jetzt haben Sie die Korrekturen vorgenommen und eine ganze Reihe neuer Probleme gefunden, da Sie nicht überprüfen konnten, ob sich Ihre Korrekturen auf nichts anderes ausgewirkt haben, bevor Sie zu QA weitergeleitet haben. Ups Frist ist jetzt gekommen und gegangen und Management ist verärgert.

Die Situation ist schlimmer, wenn Sie keine gute QS-Abteilung haben, weil die Benutzer dann die Fehler finden und nicht nur Ihren Chef unglücklich machen, sondern auch die Produktionsumgebung in die Knie zwingen und 100er oder sogar Tausende von Menschen in Gefahr sind einen Stillstand, während Sie die Fehler beheben, die durch Unit-Tests verhindert worden wären. Dies ist keine gute Berufswahl.

Nehmen wir nun an, dass dieser Cowboy-Ansatz jahrelang andauert. Jetzt scheint jede Veränderung, auch triviale, neue, unerwartete Probleme in die Luft zu jagen. Nicht nur das, sondern viele der Dinge, die Sie tun möchten, damit die Anwendung besser funktioniert, können Sie nicht tun, weil sie zu riskant oder zu teuer sind oder beides. Sie setzen also Patches auf die Patches, wodurch das System immer komplizierter und fehlerhafter und schwerer zu bedienen ist.

Benutzer stellen Ihre Zeitschätzungen in Frage, weil sie immer größer werden und es schwierig ist, ihnen zu erklären, dass das System so kompliziert geworden ist. etwas anderes zerbrechen.

Ich habe an einem Ort wie diesem gearbeitet, an dem nach zehnjähriger Entwicklungszeit praktisch nichts getan werden konnte, um die tatsächlichen Probleme zu beheben, da wir nicht feststellen konnten, welche von Hunderten angepassten Clientanwendungen fehlerhaft sein würde. Die anfänglichen Entwickler waren hauptsächlich die "Unit-Tests, wir brauchen keine stinkenden Unit-Tests". Alle, die ihnen folgten, litten unter ihrer Kurzsichtigkeit.

Ohne Unit-Tests ist die Software fehlerhafter und die Entwicklung und Wartung dauert länger. Warum um alles in der Welt würden Sie nicht Unit-Tests durchführen wollen? Die Zeit, die Sie für das Schreiben des Tests aufwenden, ist viel kürzer als die Zeit, die Sie für das Beheben von Problemen aufwenden würden, die Sie früher hätten finden sollen (je früher der Fehler gefunden wird, desto weniger Zeit wird für die Behebung benötigt), und Probleme, die Sie durch das Schreiben der Tests insgesamt vermieden hätten Erstens, um die Anforderungen besser zu verstehen, bevor Sie mit dem Codieren beginnen.

HLGEM
quelle
1

Der gesamte Code, den Sie schreiben, muss irgendwann getestet werden. Sie möchten nicht alles auf einmal schreiben und dann die Kompilierungstaste drücken und die Daumen drücken. Sie schreiben und kompilieren kleine Blöcke und senden sorgfältig ausgearbeitete Eingaben an Ihren Code, um zu überprüfen, ob er das tut, was Sie denken. Anschließend löschen Sie normalerweise Ihr Ad-hoc-Testgerät und fahren mit der nächsten Komponente fort.

Mit Unit-Tests wird dieser Prozess vereinfacht und es gibt Ihnen eine Entschuldigung, Ihre Tests zu behalten. Auf diese Weise können Sie, wenn Sie Änderungen vornehmen, die das in der Vergangenheit getestete Material beschädigen, diese Regression explizit auffangen, anstatt zuzulassen, dass sie sich auf andere Teile Ihres Codes auswirkt. Darin liegt ein echter Wert.

Was den Rot-Grün-Refaktor-Ansatz für TDD angeht, finde ich das etwas langweilig. Aber für jeden sein eigenes.

tylerl
quelle
1
Für mein 2c: Um zu wissen, ob Ihre Tests tatsächlich funktionieren, müssen Sie sehen, dass sie fehlschlagen, bevor Sie sehen, dass sie bestanden werden. Ich habe leider miterlebt, wie viele Entwickler Tests geschrieben haben, die anscheinend funktionierten, aber wenn die Testbedingungen geändert wurden, bestand der Code den Test immer noch, obwohl er fehlgeschlagen sein sollte. Wenn der Test zuerst fehlschlägt und an zweiter Stelle bestanden wird, ist es wahrscheinlicher, dass Sie einen Test ohne Fehler geschrieben haben. Wenn Sie den Test ändern, nachdem sich der Code geändert hat, können Sie nicht sicher sein, ob der Code einwandfrei ist. Ja, es ist langweilig, aber es hat eine bessere Chance, richtig zu liegen. :-)
S.Robins
0

Die meiste Zeit finde ich, dass Entwickler der Idee, Tests zu schreiben, unnachgiebig gegenüberstehen. Es ist nicht so sehr so, dass sie argumentieren, dass Tests keinen Wert haben, sondern dass sie lediglich ein Mittel sind, um herauszufinden, wie ein bestimmtes Problem gelöst werden kann. Normalerweise ändert sich dieses Problem je nach Kontext. Sobald dies erledigt ist, haben die Tests keinen Zweck mehr und können auch gelöscht werden. Hier finden Sie eine Auswahl von Kontexten, die meine Kollegen in der Vergangenheit angegeben haben, um zu entscheiden, wann ein Test geschrieben werden soll. Die einzig mögliche Antwort lautet:

  • Das vorliegende Problem muss ein Lehrbuchbeispiel für TDD sein, z. B. ein Stapel oder ein Taschenrechner
  • Trivialcode sollte nicht getestet werden (macht das vorherige Argument ungültig)
  • kritischer oder schwieriger Code sollte gründlich getestet werden (impliziert durch vorheriges Argument)
  • Tests sollten nicht eng an die Implementierung gekoppelt sein, um ein umfassendes Refactoring zu ermöglichen (macht das vorherige Argument ungültig)
  • Das Testen auf Nebenwirkungen wie das Aufrufen eines Drittanbieter-Dienstes mit einer bestimmten Nutzlast ist nicht erforderlich (daher kein Black-Box-Test).

Tatsächlich gibt es eine Art von Tests, die ich als allgemein anerkannt und für letztendlich nutzlos halte. Nämlich GUI-basiertes Testen mit Selen, Webdriver, Watir oder Arquillian. Auf diese Weise erhalten wir die 7-Stunden-Erstellungszyklen und nicht die 5-Minuten-Erstellungszyklen für meine TDD-Projekte.

Dieselben Entwickler beklagen sich normalerweise bei allen anderen, wie schlecht der Code ist und wie inkompetent die vorherigen Entwickler gewesen sein müssen. Sie finden es auch äußerst wichtig, dass Sie ein korrektes Design mit einem Whiteboard, MS Office oder einem Wiki erstellen und darauf achten, dass dieses Design auf dem neuesten Stand bleibt.

Letzteres hat mich wirklich dazu gebracht, zu erkennen, dass solche Entwickler Betrug sind. Wir alle wissen, dass jedes Designdokument, bei dem es sich nicht um einen Komponententest handelt, veraltet ist und aufgrund der hohen Wartungskosten nicht auf dem neuesten Stand gehalten wird. Tatsächlich habe ich versucht, ein gutes Mittel zu finden, um Gestaltungsideen im MS Office-Format auszudrücken, das sowohl vor als auch nach dem Schreiben von Code nützlich und lesbar war. Ich habe in allen Fällen versagt und obwohl es Leute gibt, die es schaffen, ein MS-Office-Dokument zu erstellen, das hübsch aussieht, habe ich diese auch nie wirklich für nützlich befunden.

Sie haben also die Wahl. Sie können Entwürfe und Dokumentationen erstellen, indem Sie TDD anwenden. Dies ist die einzige bekannte und bewährte Methode, um solche Dokumentationen auf der Grundlage meiner 10-jährigen Entwicklungserfahrung zu erstellen. Oder Sie können in die Politik gehen.

Sebastian Gozin
quelle
1
Tests sind keine Dokumentation. TDD ist eine gute Praxis, aber zu oft verwenden Entwickler die Auto-Gen-Tools, die zu vereinfachte Teststubs ausspucken. Wenn Sie einen Entwickler haben, der dagegen resistent ist, schreiben Sie statt feinkörniger Tests ein größeres Testgeschirr, das mehr vom gesamten Produkt beansprucht. Sie werden das offensichtlich nützlich finden. Sie müssen immer noch die richtige Dokumentation schreiben, daran führt kein Weg vorbei.
gbjbaanb
@gbjbaanb: Wenn Entwickler Auto-Gen-Tools verwenden, gibt es vielleicht Unit-Tests, aber definitiv nicht TDD. In TDD solltest du Test vor Methoden schreiben. Sie können das Scafolding des Tests einer noch nicht vorhandenen Methode nicht automatisieren. Gut geschriebene Tests sind auch Dokumentationen (technische Dokumentation für andere Entwickler des Projekts, keine Anforderungen, kein Benutzerhandbuch). Gut geschriebene und gepflegte Komponententests zeigen Ihnen, wie Methoden zu testen sind. Und wenn Tests regelmäßig überprüft werden und erfolgreich sind, sind sie offensichtlich genauer als veraltete Dokumentationen. Das kann man nicht leugnen.
kriss
unittests können eine sehr gute Entwicklerdokumentation sein, da sie Beispiele zeigen, wie die API verwendet werden kann.
k3b
Der Punkt von Selen, Webdriver usw. ist, dass Sie die Website nicht so oft manuell überprüfen müssen. Sie sparen also keine Zeit, indem Sie sie aus Ihrem Erstellungsprozess entfernen, da sie selbst Zeit sparen sollen.
Muhd