Wie startet man Unit Testing oder TDD?
Lese ich viele Beiträge, die mich davon überzeugt, ich sollte anfangen zu schreiben unit-Tests, begann ich auch mit dependency injection (Einheit) für den Willen leichter Spott, aber ich bin mir noch nicht ganz sicher auf welche Stufe sollte ich anfangen zu schreiben der unit tests und mocks, und wie oder wo zu beginnen.
Wäre der bevorzugte Weg sein, das schreiben der unit-tests, bevor die Methoden beschrieben, die in der TDD-Methodik?
Gibt es eine andere Methode oder Art und Weise für unit-Tests?
InformationsquelleAutor der Frage CD.. | 2009-09-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst testen /test nach:
Es sollte angemerkt werden, dass 'test first' als Teil von TDD ist einfach so viel (wenn nicht mehr) mit design zu tun als es zu tun mit unit-Tests. Es ist ein software-Entwicklungs-Technik, in seinem eigenen Recht-schreiben die Ergebnisse der Prüfungen in einem ständigen Verfeinerung des Designs.
Auf einem separaten beachten Sie: Wenn es einen signifikanten Vorteil zu TDD von einem reinen unit-Tests Perspektive ist es, dass es viel schwieriger (aber nicht unmöglich), einen test schreiben, das ist falsch, wenn dabei TDD. Wenn Sie schreiben, das vorher noch testen, sollte es immer scheitern, weil die Logik erforderlich, um die Prüfung zu machen pass ist noch nicht vorhanden. Wenn Sie schreiben, den test danach, der Logik sollte da sein, aber wenn der test verbuggt ist oder ist das testen der falschen Sache, kann es passieren, unabhängig.
I. e. wenn Sie schreiben, ein schlechter test vor, Sie können Holen Sie sich a grünes Licht, wenn Sie erwarten, einen roten (so dass Sie wissen, dass der test schlecht ist). Wenn Sie schreiben, einen schlechten test danach erhalten Sie ein grünes Licht, wenn Sie erwarten eine grüne (bewusst von den schlechten test).
Bücher
Die pragmatische Komponententests Buch ist auch einen Blick Wert, wie Roy Osherove ' s "The Art of Unit Testing". Die pragmatische Buch ist mehr eng fokussiert auf die verschiedenen Arten von test-Eingaben können Sie versuchen, Fehler zu finden, in der Erwägung, dass TAOUT deckt eine breitere Streuung der Themen wie test-doubles, Strategien, Wartbarkeit, etc. Entweder Buch ist gut; es hängt davon ab, was Sie von ihm wollen.
Auch hier ist eine link zu einem Vortrag von Roy Osherove hat auf unit-Tests. Es lohnt sich, eine Uhr (so sind einige der test-review-videos, die er aufgenommen, wie er betont, verschiedene Probleme und die dos/don ' TS zusammen mit Gründen, warum).
Wie zu Beginn
Gibt es nichts besseres, als das schreiben von code. Finden Sie eine ziemlich einfache Klasse, die nicht auf viel anderes. Dann schreiben beginnen einige tests.
Sich immer Fragen, "was will ich, um zu versuchen und beweisen mit diesem test?", bevor Sie es schreiben, dann gib ihm einen anständigen Namen (in der Regel mit der Methode, die aufgerufen wird, die Szenario und das erwartete Ergebnis, z.B. auf einem Stapel: "Pop WhenStackIsEmpty ThrowsException").
Denken alle Eingänge können Sie werfen es an, verschiedene Kombinationen von Methoden, die führen kann zu interessanten Ergebnissen, und so weiter.
InformationsquelleAutor der Antwort Mark Simpson
Wenn Sie neugierig sind unit-Tests der beste Weg zu lernen, ist es versuchen Sie es. Sie werden wahrscheinlich anfangen zu schreiben Integrationstests auf den ersten, aber das ist in Ordnung. Wenn Sie scheinen zu schwer zu pflegen oder zu viel Arbeit, zu schreiben, Lesen Sie mehr über welche Art von tests (unit, functional, integration) und versuchen zu lernen, den Unterschied.
Wenn Sie daran interessiert sind, beginnend mit TDD, Onkel Bob ist eine gute Quelle. Particalulary diese.
Mehr auf unit-Tests
Sicherzustellen, dass Sie bekommen, konsistente Testergebnisse. Läuft der gleiche test wiederholt, sollte dieselben Ergebnisse zurückgegeben konsequent.
Die Prüfungen sollten nicht konfiguriert werden.
Tests Reihenfolge sollte keine Rolle spielen. Dies bedeutet partielle test läuft ordnungsgemäß arbeiten kann. Auch, wenn Sie halten diese design-Philosophie im Auge, es wird wahrscheinlich Hilfe in Ihrem test Schöpfung.
Daran, dass jeder Test ist besser als gar keine Tests. Die Schwierigkeit kann gefunden werden schriftlich gute, saubere unit-tests, die Förderung der einfachen Erstellung und Pflege. Je schwieriger der Test-framework, das mehr opposition wird es sein, zu beschäftigen. Die Prüfung ist dein Freund.
InformationsquelleAutor der Antwort Ty.
In C# und mit visual studio finde ich folgende Vorgehensweise sehr hilfreich:
Denken! Machen Sie ein kleines vorab-design. Sie müssen ein klares Bild, welche Klassen Sie benötigen und wie Objekte miteinander in Beziehung treten. Konzentrieren Sie sich nur auf eine Klasse/Objekt (der Klasse/Objekt, das Sie implementieren möchten) und eine Beziehung. Andernfalls Sie am Ende mit einer allzu schwere Ausführung. Ich bin oft am Ende mit mehreren Skizzen (nur ein paar Kästchen und Pfeile) auf ein Ersatz-Blatt Papier.
Erstellen Sie die Klasse in die Produktion von code und nennen Sie es entsprechend.
Pick Verhalten der Klasse, die Sie implementieren möchten, und erstellen Sie eine stub-Methode für Sie. Mit visual studio erstellen von leeren Methoden-stubs ist ein Stück Kuchen.
Einen test schreiben. Dafür müssen Sie initialisieren das Objekt, rufen die Methode und machen geltend machen, um das Ergebnis zu überprüfen. Im einfachsten Fall ist die Geltendmachung erfordert eine andere Methode der stub oder einer Eigenschaft in der Produktion von code.
Kompilieren Sie und lassen Sie die test-runner zeigen Sie die rote bar!
Code das erforderliche Verhalten in der Produktion code, um zu sehen, die grünen Balken erscheinen.
Bewegen, um die nächste Verhalten.
Für dieses Verfahren sind zwei Dinge sehr wichtig:
Erst testen oder nicht testen Sie zuerst?
Ich finde es in der Regel schwieriger zu nachrüsten tests zu bestehenden Produktions-code. In den meisten Fällen ist dies aufgrund der Wirren Abhängigkeiten zu anderen Objekten, wenn das Objekt unter test initialisiert werden muss. TDD in der Regel vermeidet dies, weil Sie möchten, initialisieren Sie das Objekt in den test-Fällen mit weniger Aufwand wie möglich. Dies führt zu einer sehr losen Kopplung.
Wenn ich nachrüsten tests, die müssen mühselig Arbeit ist die Aufgabe initialisieren Sie das Objekt unter test. Auch die Behauptungen kann eine Menge Arbeit sein, weil der Wirren Abhängigkeiten. Für diese benötigen Sie zum ändern der Produktions-code und die Abhängigkeiten zerstören. Durch die Verwendung von dependency injection richtig, dies sollte kein Problem sein.
InformationsquelleAutor der Antwort Theo Lenndorff
Ja, die am günstigsten gelegene Weise zu tun, TDD zu schreiben, der test-first (wie angedeutet durch den Namen Test-Driven Development). Wenn Sie beginnen, mit Telefon für Hörgeschädigte kann es schwierig sein zu wissen, wo zu beginnen, das schreiben der tests, so würde ich vorschlagen, pragmatisch zu sein darüber. Nachdem alle, ist der wichtigste Teil unserer Arbeit ist es, über die Bereitstellung von funktionierendem code, nicht so viel, wie der code gebastelt wurde.
So können Sie starten Sie durch das schreiben von tests für bestehenden code. Sobald Sie eine Dreh raus, wie die tests aufgebaut sind, welche, die scheinen einen guten job zu machen und welche, die scheinen nicht so Gott, dann werden Sie es einfacher finden, Tauchen mehr in den test-first-Ansatz. Ich habe festgestellt, dass ich tests schreiben, zuerst zu einem größeren Ausmaß wie die Zeit vergeht. Es wird einfach mehr Natürliche mit steigender Erfahrung.
InformationsquelleAutor der Antwort Fredrik Mörk
Steve Sanderson hat einen großen Kommentar auf TDD best practices.
http://feeds.codeville.net/~r/SteveCodeville/~3/DWmOM3O0M2s/
Außerdem gibt es eine große Reihe von tutorials für eine ASP.net mvc-Projekt erörtert, dass eine Menge TDD-Prinzipien (wenn es Sie nicht stört das lernen ASP.net MVC auf dem Weg)
http://www.asp.net/learn/mvc-videos/ Blick für das "Schaufenster" - Reihe am unteren Rand der Seite.
MOQ zu sein scheint, die-hot-mocking framework in letzter Zeit, möchten Sie vielleicht zu schauen, wie gut
In der Zusammenfassung, versuchen Sie, einen test schreiben zu validieren, etwas, das Sie ' uns ' re versuchen, zu archivieren, dann implementieren Sie den code, damit es funktioniert.
Das Muster ist bekannt als Red - Green - Refactor. Auch tun Ihr bestes, um Abhängigkeiten minimieren, so dass Sie Ihre tests konzentrieren sich auf eine Komponente.
Persönlich, ich benutze Visual Studio Unit-Tests. Ich bin kein hardcore-TDD-Entwickler, aber das, was ich mag zu tun ist:
Fühle ich auch seine sehr nützlich, um die Funktionalität hinzufügen, auf eine vorhandene code-Basis. Wenn Sie möchten, fügen Sie einige neue feature, erstellen Sie zunächst die unit-test für das, was Sie hinzufügen möchten, Schritt für Schritt durch den code, um zu sehen, was Sie ändern müssen, gehen Sie dann durch den TDD-Prozess.
InformationsquelleAutor der Antwort TJB
Wählen Sie eine kleine, nicht-kritische Applikation und implementieren es mit TDD. Auf den ersten, die neue Art zu denken, fühlen sich komisch an, aber vielleicht nach einer Woche oder zwei der Praxis füllen Sie das Natürliche Gefühl.
Hier ist ein tutorial-Anwendung (in der Abteilung "Tutorials"), die zeigt, welche Arten von tests zu schreiben. In diesem tutorial werden Sie code schreiben, übergeben Sie den vordefinierten Testfällen, so dass Sie sich in den Rhythmus, und später schreiben Sie dann Ihre eigenen tests. Die README-Datei enthält Anweisungen. Es ist in Java geschrieben, aber Sie können leicht passen Sie es C#.
InformationsquelleAutor der Antwort Esko Luontola
Ich würde auf TDD, test-first-Entwicklung, vor mocks und dependency injection. Um sicher zu sein, trotzt der Ihnen helfen kann, Ihre Einheiten besser zu isolieren und damit besser machen Einheit testen - aber meiner Meinung nach, Spott und DI sind mehr fortgeschrittene Konzepte, die stören können, mit der Klarheit nur zu schreiben, Ihre ersten tests.
Verspottet, und DI, haben Ihren Platz; Sie sind gute Instrumente, um in Ihren Werkzeugkasten. Aber Sie nehmen einige Raffinesse, eine erweiterte Verständnis, als die typischen Tests neophyte hat. Schreiben Sie Ihre ersten tests, jedoch genau so einfach, wie es klingt. So ist es einfacher, auf sich zu nehmen, und es ist mächtig alle von selbst (ohne verhöhnt und DI). Erhalten Sie die frühere, einfachere Gewinne durch das schreiben von mock-freie tests zuerst, als durch den Versuch, mit zu beginnen, verspottet, und TDD, und DI alles auf einmal.
Start mit test-first; wenn Sie sind sehr komfortabel mit es, und wenn Ihr code sagt Ihnen, Sie müssen mocks, dann nehmen verhöhnt.
InformationsquelleAutor der Antwort Carl Manaster
Arbeitete ich für Unternehmen, die unit-Tests/Integrationstests zu weit, und diejenigen, die tun zu wenig, so mag ich denke, ich habe eine gute balance zwischen den beiden.
Ich würde empfehlen, TDD - Test Driven Development. Dies stellt sicher, Sie haben eine gute Deckung, aber es hält auch die Fokussierung Ihre Aufmerksamkeit auf den rechten Ort, und problem.
Also das erste, was Sie tun, wird für jedes Stück der neuen Entwicklung Schreibe einen unit-test - auch wenn Sie nicht über eine einzige Klasse zu testen.
Überlegen Sie, was Sie testen. Führen Sie nun den test. Warum wäre es nicht kompilieren? Braucht man da classA. Erstellen Sie die Klasse und führen Sie den test. Warum lässt es sich nicht kompilieren? Da es nicht methodA. Write-Methode ein und führen unit-Tests wieder. Warum wird der test ausfallen? Da methodA nicht implementiert. Implementieren methodA und test starten. Warum scheitert es? Da methodA nicht wieder die richtige erwarteten Wert...etc
Du weiterhin wie das schreiben von unit-tests, wie Sie sich entwickeln und dann irgendwann wird der test bestanden und das Stück wird die Funktionalität komplett sein.
InformationsquelleAutor der Antwort TheLearner
Sich auf Steve Freeman 's Antwort: Dave Astel' s Buch nennt sich "Test-driven Development - A practical guide". Wenn die Art der Anwendung, die Sie schreiben, ist eine GUI Anwendung, dann sollte dies hilfreich sein. Ich lese Kent Becks Buch, aber ich konnte nicht herausfinden, wie man ein Projekt mit TDD. Astel ' s book test-drives eine komplette nicht-triviale GUI-Anwendung von Anfang bis Ende Geschichten. Es hat mir sehr geholfen, um tatsächlich starten Sie mit TDD, zeigte Sie mir wo und wie ich anfangen soll.
InformationsquelleAutor der Antwort
Test driven development kann verwirrend sein für Anfänger, eine Menge Bücher, die ich Lesen, wenn ich lernen mußte, TDD würde Ihnen beibringen, wie schreibt man Unit-Tests für eine Rechner-Klasse, aber es scheint sehr wenig Hilfe für den Aufbau der realen Welt-apps, die mehr Daten-zentrierte wenn ich wage zu sagen. Für mich der Durchbruch war, als ich Verstand, was Behaviour Driven Development oder BDD und wie zu tun beginnen die Prüfung von außen. Jetzt kann ich einfach empfehlen, dass Sie sich auf Ihre Applikation konzentrieren Verhalten und schreiben von unit-tests, um es zu überprüfen. Es gibt eine Menge Debatte, die zwischen TDD und BDD-aber ich denke, dass gut geschrieben automatisierten tests auf jeder Ebene auf Wert hinzufügen, und schreiben brauchen wir, um den Fokus auf das Verhalten.
Hadi Hariri hat einen hervorragenden Beitrag hier
http://hadihariri.com/2012/04/11/what-bdd-has-taught-me/
Habe ich auch geschrieben einige Artikel über das Thema, dass ich das Gefühl helfen zu verstehen, die Konzepte im Zusammenhang mit TDD hier
http://codecooked.com/introduction-to-unit-testing-and-test-driven-development/
http://codecooked.com/different-types-of-tests-and-which-ones-to-use/
InformationsquelleAutor der Antwort Afraz Ali
Lesen Pragmatic Unit Testing in C# with NUnit. Es hat umfassende Informationen über die Gründung schreiben, Hoden und Strukturierung der code, damit es mehr unit-Tests freundlich.
InformationsquelleAutor der Antwort TheVillageIdiot
Wenn Sie noch nicht geschrieben unit-tests vor, dann wählen Sie einfach einige Klassen und beginnen, schreiben Sie Ihre unit-tests, und arbeiten weiterhin an der Entwicklung von unit-tests.
Wie Sie Erfahrungen sammeln, können Sie dann beginnen mock aus der Datenbank zum Beispiel durch die Verwendung der Unity-framework, aber ich würde vorschlagen, einfach ab und gewinnt an Erfahrung, bevor Sie diesen Sprung.
Sobald Sie sind komfortabel mit, wie Sie schreiben unit-tests, dann können Sie versuchen, tun TDD.
InformationsquelleAutor der Antwort James Black
Ich lieber KentBeck Ansatz, das ist schön erklärt in dem Buch, Test-Driven Development by Example - Kent Beck.
aus Ihrer Frage kann ich ableiten, Sie sind sich nicht sicher, mit dem test-frame-Arbeit - bei der Auswahl der richtigen test-frame-Arbeit ist sehr wichtig für TDD oder schreiben von unit-tests(im Allgemeinen).
Einzige praktische problem mit TDD ist "Refactoring"(wir müssen Refactoring test code) nimmt sich viel Zeit.
InformationsquelleAutor der Antwort FL4SOF
Ich denke, Dave Astels' Buch ist immer noch eine der besten Einführungen. Es ist für Java, aber Sie sollten in der Lage sein zu übersetzen.
InformationsquelleAutor der Antwort Steve Freeman