it-swarm.com.de

Wie fange ich mit Ruby on Rails auf TDD an?

Ich bin mit den Konzepten vertraut (habe Testkurse am College besucht), bin mir aber noch nicht sicher, wie ich sie wirklich anwenden soll, da ich nie an einem "echten" TDD-Projekt gearbeitet habe.

Ich bin dabei, die Entwicklung eines Projekts mit Ruby on Rails (höchstwahrscheinlich mit 2.3)) zu starten. Diese Anwendung wird zur Verwaltung von Daten, Benutzern und Einige Dateien, die zunächst nicht allzu kompliziert sein werden, aber in den nächsten 6 Monaten möglicherweise sehr umfangreich werden, sodass ich der Meinung bin, dass dies der richtige Zeitpunkt ist, um mehr über TDD zu erfahren.

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

  • Welchen Ruby on Rails TDD 101-Artikel soll ich lesen?

  • Was muss ich testen?

  • Welches Juwel/Plugin soll ich verwenden?

  • Soll ich rspec verwenden? Etwas anderes?

  • Wie gehe ich vor, um alle meine Testklassen bereitzustellen, nachdem ich sie erhalten habe? (z. B .: Kontinuierliche Integration)

  • Wie zeitaufwändig ist TDD wirklich?

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


Ich lerne gerne anhand von Beispielen, also könnte mir jemand sagen, wie ich vorgehen und einen TDD-Ansatz wählen würde, um dieses Problem zu lösen:

Ich habe Firmen. Ich habe Kontakte. Ein Kontakt kann mit einem Unternehmen verknüpft werden. Ein Unternehmen kann mehrere Kontakte haben. Ich möchte Möglichkeiten zum Erstellen von Kontakten, Unternehmen und zum Verknüpfen von Kontakten mit Unternehmen erstellen.

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

167
marcgg

Welchen Ruby on Rails TDD 101-Artikel soll ich lesen?

Ich beginne mit eine Anleitung zum Testen von Rails -Anwendungen .

Außerdem bietet Railscast einige hervorragende Screencasts zur Verwendung verschiedener Testwerkzeuge.

Was muss ich testen?

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

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

Stellen Sie außerdem sicher, dass Sie nicht zu viel testen.

Welches Juwel/Plugin soll ich verwenden? Soll ich rspec verwenden? Etwas anderes?

Wenn Sie anfangen, 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 Tool, wenn Sie wirklich testgetrieben sein möchten. Aber es ist ein "Nizza" nicht erforderlich.

Wie gehe ich vor, um alle meine Testklassen bereitzustellen?

Ich bin mir bei der Frage nicht sicher. Normalerweise stellen Sie die Tests nicht bereit. Sobald Sie alle Ihre Testklassen haben, geben Sie einfach "Rake-Test" ein, um alle Ihre Tests auszuführen.

Wie zeitaufwändig ist TDD wirklich?

Das spart wirklich Zeit. Wenn Sie Labyrinth-Rätsel mögen, wissen Sie, dass es fast immer einfacher ist, es zu lösen, wenn Sie von Anfang bis Ende durcharbeiten. Gleiches gilt für TDD. Ohne Testfahrt überlegen Sie konsequent, was ich als nächstes tun soll. Bei Test Driven zeigt der Test an, was als Nächstes zu tun ist (er bricht ab, wenn die Logik nicht vorhanden ist, sodass Sie nur das defekte Teil reparieren müssen). Außerdem haben Sie weniger Fehler, wodurch Sie auf lange Sicht viel Zeit sparen.

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

Du brauchst kein Buch. Die effizienteste Art, etwas zu lernen, ist: Tu es einfach. Kehren Sie zu den Buch- oder Online-Ressourcen zurück, wenn Sie auf eine Frage oder ein Problem stoßen. Das ist auch agil.

In Ihrem Beispiel müssen folgende Dinge getestet werden: Ein Kontakt kann mit einer 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
202
ez.

Ich habe eine 6-Episoden-Videoserie produziert, die im Sommer 2010 in San Francisco als öffentlicher Kurs unterrichtet wurde. Das Material behandelt Tests und Entwicklereffizienz in Rails 2.3 mit RSpec 1.3. Slightly datiert, aber die Hauptkonzepte gelten für Rails 3 mit Rspec 2.x

http://www.rubyfocus.biz/class_video/2010/07/19/Rails_tdd_class_1.html

13
Wolfram Arnold

Ich empfehle dieses Buch: Ruby on Rails Tutorial . Ich bin fast fertig damit. Das Buch verwendet TDD das ganze Buch. Probieren Sie es aus!

9
sivabudh

Ich empfehle dieses Buch: Agile Web Development with Rails

8
JRL

Ich benutze :

  1. Shoulda und rspec zum Testen
  2. Mokka zum Verspotten
  3. Factory_girl für Fabriken
  4. parallel_specs zum schnelleren Testen
  5. metric_f zur Code-Analyse
5
Mike

Bei TDD geht es zunächst darum, Tests zu schreiben. Dies zwingt Sie grundsätzlich dazu, Ihren eigenen Client zu schreiben, bevor Sie Ihren Anwendungscode schreiben. Der Zyklus besteht im Allgemeinen darin, einen Test für eine nicht vorhandene API zu schreiben, den Test in der Erwartung, dass dieser fehlschlägt, auszuführen, den API-Code zu schreiben, den Test erneut auszuführen und sicherzustellen, dass er bestanden wird. Dann schreibe deinen nächsten Test ... und so weiter.

Das könnte Sie auch interessieren Rails guide .

5
Andy Gaskell

Welches Juwel/Plugin soll ich verwenden?

Ich habe es immer genossen shoulda .

Wie zeitaufwändig ist TDD wirklich?

Der Grund, warum ich die TDD-Entwicklung immer favorisiert habe, liegt darin, dass ich mich darauf konzentriere, wie ich ein bestimmtes Stück Code implementieren werde. Ich habe das seltsame Gefühl, dass ich weniger Zeit für spätere Nacharbeiten aufwenden muss, wenn ich mich stärker an die TDD-Prinzipien halte. Die aufgewendete Zeit hängt davon ab, wie gut Sie Unit-Tests schreiben. Wenn die Unit-Tests das erwartete Verhalten nicht erfassen, wird die gesamte dafür aufgewendete Zeit verschwendet.

3