Question

A deux parter avec une intro rapide. Intro: Je viens à Ruby de Perl, et je suis un peu perdu parmi les choix de cadre de test. Je comprends qu'il n'y a probablement pas un seul, tout autour de meilleurs choix, mais je ne peux même pas une image claire du champ de jeu.

Alors, d'abord, MiniTest ou Test :: Unit? Je viens de réaliser que 1.9.1 par défaut MiniTest maintenant. Je ne l'avais pas remarqué puisque tous les anciens Test :: tutoriels unitaires fonctionnent toujours bien. Si vous require test/unit, vous obtenez en fait MiniTest comme émulateur Test :: Unit (!). Ma première pensée était d'aller avec le choix par défaut de MiniTest (une fois que je savais qu'il était là), mais même des livres très récents ne semblent pas intéressés à enseigner. Ruby meilleures pratiques dit « Il existe des différences significatives » entre les deux, mais il choisit de ne pas traiter avec eux. Il dirige également tous ses tests via Test :: Unit (plus quelques add-ons sur mesure). La nouvelle Pioche a également très peu MiniTest en soi , et dans le chapitre sur les tests qu'ils utilisent également le test :: Unité Version d'émulation de MiniTest. Pour clarifier ma première question alors: est MiniTest une pauvre première option? Dois-je utiliser par défaut le test :: émulateur d'unité?

En second lieu, au-delà des options intégrées, il y a Rspec, concombre et compagnie pour les tests axés sur le comportement. La communauté inclinant fortement vers ce style et ce cadre? Devrais-je commencer par Rspec?

Je vais jouer un peu avec tous les trois, mais je suis curieux d'entendre ce genre de consensus (le cas échéant) se forme autour des tests de Ruby 1.9.

(Un suivi rapide, comme un rappel à moi-même et pour toute personne intéressée. Voir ce lien pour un aperçu utile des différentes invocations pour test :: Unit et MiniTest dans les différents Rubies 1,8 à 1.9.1.)

Était-ce utile?

La solution

Y at-il consensus? Je dirais que non. Il y a une voix forte de la communauté pour l'utilisation de TDD / BDD mais même alors ce n'est pas universel. Le cadre est probablement moins important que l'application de la pratique en premier lieu.

Je crois que minitest est le 1.9 remplacement pour Test :: Unit, qui existe seulement comme une enveloppe autour de la nouvelle bibliothèque pour la compatibilité descendante. Je suppose que de prendre la route spécifique à minitest serait plus tournée vers l'avenir.

RSpec est une prise quelque peu différente: moins évidemment infusé par les cadres influencés xUnit « traditionnels ». Il vaut la peine de passer du temps avec pour voir si vous le préférez.

Il y a aussi Shoulda . bien que je ne sais pas comment il est testé sur 1.9. il est plus d'une enveloppe / extension pour Test :: Unit, donc il va probablement travailler, mais

Bien sûr, le plaisir ne s'arrête pas là: une fois que vous avez choisi un cadre de test que vous allez avoir un moteur moqueur d'une sorte. Ou un remplacement de fixation de données.

Dans tous les cas, je dirais que tout cadre pour lequel vous pouvez trouver des preuves de mises à jour régulières, une communauté ouverte, peuplée et une API vous ne détestez pas fera le travail. Il est peu probable que vous allez être abattu plus tard pour avoir fait quelque choix que vous faites.

Autres conseils

J'utilise Rspec pour un an. Je suis passé de test :: unité spécifiquement parce que je pouvais imprimer de manière lisible ce qui est testé.

Il se lit comme la prose. Ce qui est gros plus pour moi. Mais comme avec tout les résultats peuvent varier.

describe Model do
  it "should do what I want" do
    this.should == that
    it.should be_nil
    that.should_not be_true
  end
end 

reguardless également du cadre de test, vous devez également penser à un outil de couverture comme Rcov . Il intègre avec rspec et vous indiquera où votre code manque test.

RSpec est le consensus des livres populaires Rails comme "The Way Rails". Plus mon humble avis sont des tests qui se lisent comme anglais, les formats de sortie qui se lisent comme l'anglais, et sur la volée matchers. Inconvénients sont la vitesse lente et la bibliothèque a parfois l'impression « magique » à savoir trop étranger pour codeurs qui sont plus familiers avec Ruby et tests unitaires. RSpec offre également concombre et cornichon, qui sont des moyens d'écrire des histoires d'utilisateurs qui sont l'acceptation des clients utiles.

MiniTest est construit en Ruby 1.9. Plus à mon humble avis sont la vitesse rapide, très facile à lire / écrire pour d'autres langues codeurs et des tests qui utilisent beaucoup le même style de code que vous souhaitez utiliser dans votre code réel. MiniTest a beaucoup plus que la plupart des gens savent, par exemple MiniTest Spec a BDD Matchers semblable à RSpec, MiniTest Mock est un système moqueur et MiniTest de référence est pour le profilage de la performance.

Dans mon expérience personnelle, les gens qui construisent des applications Rails tendent vers RSpec, et les gens qui construisent pur le code Ruby tendent vers l'unité MiniTest, Spec, Mock, Benchmark, et ainsi de suite.

Je perfer personnellement rspec. J'ai trouvé que mes tests se concentrant sur le comportement m'a vraiment aidé à autour de ce que je voulais faire.

Avec rspec aller chercher quelque chose comme Factory Girl ou Machiniste pour générer vos données de test, ne pas utiliser les appareils.

En ce qui concerne ce que Mike a dit, le projet rspec est assez actif avec les nouvelles versions libérés normalement avec chaque version de rails pour l'aider à suivre le développement du cadre.

RSpec est agréable mais je pense que récemment, il y a eu beaucoup de discussions et de mouvement derrière Minitest qui vient avec Ruby 1.9.x. Il a beaucoup des subtilités de RSpec, mais est beaucoup plus maigre et et concis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top