167 votes

Comment démarrer le TDD avec Ruby on Rails ?

Je connais bien les concepts (j'ai suivi des cours de test à l'université), mais je ne sais pas encore comment les utiliser réellement, car je n'ai jamais travaillé sur un "vrai" projet TDD.

Je suis sur le point de commencer le développement d'un projet utilisant Ruby on Rails (très probablement avec la version 2.3). Cette application sera utilisée pour gérer des données, des utilisateurs et quelques fichiers. Elle ne sera pas trop compliquée au début, mais elle pourrait évoluer considérablement dans les 6 prochains mois. Je pense donc que c'est le bon moment pour m'intéresser de plus près au TDD.

J'ai une idée de base sur la façon de procéder, mais j'ai encore besoin d'indications et de conseils :

  • Quel article de Ruby on Rails TDD 101 dois-je lire ?

  • Que dois-je tester ?

  • Quelle gemme/plugin dois-je utiliser ?

  • Dois-je utiliser rspec ? Autre chose ?

  • Une fois que j'ai obtenu toutes mes classes de test, comment puis-je les déployer ? (par exemple : Intégration continue)

  • Combien de temps prend réellement le TDD ?

  • Dois-je lire un livre à ce sujet ou puis-je tout comprendre en jouant avec et en lisant des tutoriels en ligne ? Si je dois lire un livre, quel livre ?


J'aime apprendre avec des exemples. Quelqu'un pourrait-il me dire comment adopter une approche TDD pour résoudre ce problème ?

J'ai des entreprises. J'ai des contacts. A contact peut être lié à une entreprise. A entreprise peut avoir plusieurs contacts. I veux créer des moyens de créer des contacts, des entreprises et de lier des contacts à des entreprises.

Vous n'êtes pas obligé d'utiliser cet exemple dans votre réponse mais cela vous aiderait :)

202voto

ez. Points 3836

Quel article de Ruby on Rails TDD 101 dois-je lire ?

Je vais commencer par un guide pour tester les applications rails . Aussi Railscast propose d'excellents screencasts sur la façon d'utiliser les différents outils de test.

Que dois-je tester ?

Je vais commencer par les modèles, car ils sont faciles à tester. La règle simple est que vous devez couvrir chaque instruction if dans votre test. Vous devez tester l'objectif de la méthode (pour vous assurer qu'elle fonctionne comme prévu), ainsi que tous les cas limites.

Assurez-vous également que vous ne finissez pas par trop tester.

Quel gem/plugin dois-je utiliser ? Dois-je utiliser rspec ? Quelque chose d'autre ?

au départ, il suffit d'utiliser Unité de test . Vous pouvez utiliser rspec ou cucumber après vous être familiarisé avec les bases. Autotest est un outil intéressant si vous voulez être véritablement guidé par les tests. Mais il ne s'agit pas d'un outil indispensable.

Une fois que j'ai obtenu toutes mes classes de test, comment puis-je les déployer ?

Je ne suis pas sûr de la question. En général, vous ne déployez pas les tests. Une fois que vous avez toutes vos classes de test, tapez simplement 'rake test' pour exécuter tous vos tests.

Combien de temps prend réellement le TDD ?

Cela permet de gagner du temps, vraiment. Si vous aimez les puzzles en labyrinthe, vous savez qu'il est presque toujours plus facile de les résoudre si vous allez de la fin au début. C'est la même chose avec le TDD. Sans l'approche pilotée par les tests, vous vous demandez constamment "que dois-je faire ensuite". Avec le Test Driven, le test vous dira ce qu'il faut faire ensuite (il s'interrompt si la logique n'est pas là, donc vous avez juste besoin de réparer la partie cassée). De plus, vous aurez moins de bogues, ce qui vous fera gagner beaucoup de temps à long terme.

Dois-je lire un livre à ce sujet ou bien puis-je tout comprendre en jouant simplement en jouant avec et en lisant des tutoriels tutoriels en ligne ? Si je dois lire un livre, quel livre ?

Vous n'avez pas besoin d'un livre. La façon la plus efficace d'apprendre quoi que ce soit est de le faire, de revenir au livre ou aux ressources en ligne lorsque vous rencontrez une question ou un problème. C'est aussi une méthode agile.

Dans votre exemple, les choses qui doivent être testées sont : Un contact peut être lié à 1 entreprise, Une entreprise peut avoir plusieurs contacts, créer des moyens de créer des contacts, et lier les contacts aux entreprises.

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

13voto

Wolfram Arnold Points 3490

J'ai produit une série de six épisodes vidéo qui ont été enseignés dans le cadre d'un cours public à San Francisco au cours de l'été 2010. Le matériel couvre les tests et l'efficacité des développeurs dans Rails 2.3 en utilisant RSpec 1.3. Légèrement daté, mais les principaux concepts s'appliquent à Rails 3 avec Rspec 2.x.

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

9voto

ShaChris23 Points 7713

Je recommande ce livre : Tutoriel Ruby on Rails : Apprendre Rails par l'exemple . Je l'ai presque terminé. Le livre utilise TDD le ensemble du site livre. Essayez-le !

8voto

JRL Points 36674

Je recommande ce livre : Développement web agile avec Rails

5voto

Andy Gaskell Points 15264

La TDD consiste à écrire les tests en premier. Cela vous oblige essentiellement à écrire votre propre client avant d'écrire le code de votre application. Le cycle consiste généralement à écrire un test pour une API qui n'existe pas, à exécuter le test en s'attendant à ce qu'il échoue, à écrire le code de votre API, à exécuter à nouveau votre test et à s'assurer qu'il passe. Ensuite, écrivez votre prochain test... et ainsi de suite.

Vous pourriez également être intéressé par ce qui suit Guide Rails .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X