2009-09-06 10 views
157

Ich bin vertraut mit den Konzepten (nahm Test Klassen in der Schule), aber ich bin mir nicht sicher, wie man sie wirklich verwenden, da ich nie an einem "echten" TDD-Projekt gearbeitet habe.Wie starte ich mit Ruby on Rails auf TDD?

Ich bin im Begriff, die Entwicklung eines Projekts mit Ruby on Rails (höchstwahrscheinlich mit 2.3) zu starten. Diese Anwendung wird verwendet, um Daten, Benutzer und einige Dateien zu verwalten. Es wird zunächst nicht zu kompliziert sein, aber in den nächsten 6 Monaten könnte es sehr viel werden. Daher denke ich, dass dies der richtige Zeitpunkt ist, um mehr über TDD zu erfahren.

Ich habe eine grundlegende Idee, wie man es tun, aber ich brauche noch einige Hinweise und Ratschläge:

  • Was Ruby on Rails TDD 101 Artikel soll ich lesen?

  • Was muss ich testen?

  • Welches Juwel/Plugin sollte ich verwenden?

  • Sollte ich rspec verwenden? Etwas anderes?

  • Sobald ich alle meine Testklassen habe, wie gehe ich vor und stelle sie bereit? (z. B. Kontinuierliche Integration)

  • Wie zeitaufwändig ist TDD wirklich?

  • Muss ich ein Buch darüber lesen oder bekomme ich alles, indem ich damit herumspiele und Online-Tutorials lese? Wenn ich ein Buch lesen muss, welches Buch?


wie ich mit Beispielen zu lernen, so könnte mir jemand sagen, wie ich gehen würde und ein TDD Ansatz, dieses Problem zu lösen:

I Firmen haben. Ich habe Kontakte. Ein Kontakt kann mit 1 Firma verknüpft werden. Eine Firma kann mehrere Kontakte haben. I möchten Möglichkeiten zum Erstellen Kontakte, Unternehmen und Link Kontakte zu Unternehmen erstellen.

Sie müssen dieses Beispiel in Ihrer Antwort nicht verwenden, aber es würde :)

Antwort

192

Was Ruby on Rails TDD 101 Artikel sollte ich lesen?

Ich werde mit a guide to testing rails applications beginnen.

Auch hat einige ausgezeichnete Screencasts über die Verwendung verschiedener Test-Tools.

Was muss ich testen?

Ich werde mit Modellen beginnen, da sie einfach zu testen sind. Die einfache Regel ist, dass Sie jede if-Anweisung in Ihrem Test abdecken müssen.

Sie sollten den Zweck der Methode (um sicherzustellen, dass sie wie erwartet funktioniert) sowie alle Randfälle testen.

Vergewissern Sie sich auch, dass Sie nicht über die Tests enden.

Welches Juwel/Plugin sollte ich verwenden? Sollte ich rspec verwenden? Etwas anderes?

Wenn Sie beginnen, verwenden Sie einfach Test Unit. Sie können rspec oder cucumber verwenden, nachdem Sie sich mit den Grundlagen vertraut gemacht haben.

Autotest ist ein nettes Werkzeug, wenn Sie wirklich getestet werden wollen. Aber es ist ein 'nice have' nicht erforderlich.

Sobald ich alle meine Testklassen habe, wie gehe ich vor und stelle sie bereit?

Nicht sicher über die Frage. In der Regel werden die Tests nicht bereitgestellt. Sobald Sie alle Testklassen haben, geben Sie einfach "Rake-Test" ein, um alle Ihre Tests durchzuführen.

Wie zeitaufwendig TDD wirklich ist?

Es spart wirklich Zeit. Wenn Sie Labyrinth Puzzle mögen, wissen Sie, dass es fast immer einfacher ist, es zu lösen, wenn Sie von Ende zu Anfang gehen. Gleiches gilt für TDD. Ohne Test Driven denken Sie immer wieder "Was soll ich als nächstes machen?". Mit Test Driven wird der Test Ihnen sagen, was als nächstes zu tun ist (es bricht, wenn die Logik nicht da ist, also müssen Sie nur das gebrochene Teil reparieren). Außerdem haben Sie weniger Fehler, die Ihnen auf lange Sicht viel Zeit sparen.

Benötige ich ein Buch darüber zu lesen oder kann ich alles bekommen, was nur durch , um mit ihm zu spielen und Online- Tutorials zu lesen? Wenn ich ein Buch lesen muss, welches Buch?

Sie brauchen kein Buch. Die effizienteste Art, etwas zu lernen, ist: tu es einfach. Gehen Sie zurück zum Buch oder zu Online-Ressourcen, sobald Sie auf eine Frage oder ein Problem stoßen. Das ist auch agil.

In Ihrem Beispiel sind die Dinge, die getestet werden müssen: Ein Kontakt kann mit 1 Firma verknüpft werden, Eine Firma kann mehrere Kontakte haben, Möglichkeiten zum Erstellen von Kontakten erstellen und Kontakte mit Firmen verknüpfen.

class CompanyTest <Test::Unit 
    def test_relationship # test associations/relationships 
     c = companies(:some_company) 
     assert_equal [a list of contacts], c.contacts # make sure a company can have multiple contacts 
    end 
end 

class ContactTest<Test::Unit 
    def test_relationships 
     c = contact(:some_contact) 
     assert_equal some_company, c.company # make sure the contact link to 1 company 
    end 

    def test_create/add 
     # test create contacts, here you need to make sure the contact is created correctly, and linked to company correctly 
    end 
end 
+0

danke für diese wirklich vollständige Antwort! – marcgg

+0

Vielen Dank. Ich bin ein Neuling und es hat mir wirklich geholfen, den Zweck von TDD zu verstehen – qasimzee

+3

Der Link zu dem Artikel ist kaputt, aber fand es hier: http://web.archive.org/web/20100325215651/http://bloritsch.d -haven.net/articles/2008/07/03/test-driven-development-101 – fivetwentysix

5

TDD ist über die Tests zuerst schreiben. Dies zwingt Sie dazu, Ihren eigenen Client zu schreiben, bevor Sie Ihren Anwendungscode schreiben. Der Zyklus schreibt im Allgemeinen einen Test für eine API, die nicht existiert, führt den Test aus und erwartet, dass er fehlschlägt, gehen Sie, schreiben Sie Ihren API-Code, führen Sie Ihren Test erneut aus und stellen Sie sicher, dass er besteht. Dann schreibe deinen nächsten Test ... und so weiter.

Das könnte Sie auch interessieren Rails guide.

+0

Danke für die Antwort, die Schienen Guide Link ist besonders hilfreich – marcgg

3

Was gem/Plugin soll ich verwenden?

Ich habe immer genossen shoulda.

Wie zeitaufwendig TDD wirklich ist?

Der Grund, warum ich TDD-Entwicklung immer bevorzugt habe, ist, dass es konzentriert, wie ich ein bestimmtes Stück Code implementieren werde. Ich habe ein anekdotisches Gefühl, dass ich, wenn ich mich stärker an die TDD-Prinzipien halte, weniger Zeit für die Nachbearbeitung aufwende. Die Menge an Zeit ist alles, wie gut Sie Komponententests schreiben. Wenn die Komponententests nicht das erwartete Verhalten erfassen, ist die gesamte für sie verbrachte Zeit verschwendet.

9

ich dieses Buch empfehlen Rails: Ruby on Rails Tutorial. Ich bin fast fertig damit. Das Buch verwendet TDD das ganze Buch. Versuche es!

+0

Link funktioniert nicht –

+0

@ Deepak versuchen Sie es erneut! – sivabudh