49 votes

Minitest et Rspec

Je viens de regarder un Railscast pour Minitest.

Quels sont les avantages et les inconvénients de l'utilisation de RSpec par rapport à Minitest pour tester une application rails? Quelles fonctionnalités vais-je perdre lors de la conversion de RSpec en Minitest?

74voto

Myron Marston Points 8940

Je suis l'un des RSpec développeurs, et n'ont jamais utilisé de minitest, afin de prendre mes préjugés en compte lors de la lecture de cette réponse.

En gros, RSpec la puissance vient du fait qu'il réifie donc de nombreux tests de concepts dans des objets de première classe. Où Test::Unit et Minitest utiliser des méthodes simples pour faire des assertions, RSpec utilise de première classe matcher objets qui prennent en charge la négation, l'auto-description et plus. De RSpec exemples sont des objets de première classe qui prennent en charge des métadonnées riches; minitest/spec compile it blocs vers le bas à l'aide de méthodes simples, qui ne prennent pas en charge le même type de métadonnées riches. RSpec prend en charge la spécification de comportements partagés à l'aide d'une première classe de la construction (partagée exemple des groupes) qui accepte des arguments; w/ minitest vous pouvez utiliser héritage ou d'un mixin la ré-utilisation des tests, mais il n'a pas le même genre de soutien de première classe. RSpec a explicitement formateur de l'API (et ils sont nombreux tiers des formateurs qui l'utilisent); je ne suis pas au courant de minitest avoir le même genre de première classe formateur de l'API.

Comme quelqu'un qui est constamment en cours d'exécution des tests et pratiquer le TDD tout au long de la journée, j'ai trouver la puissance RSpec me donne très utile. Beaucoup de gens trouvent qu'il est exagéré, même si, et il est ajouté cognitives coût extra, des abstractions.

Voici quelques caractéristiques spécifiques RSpec a ce que je crois minitest manque:

  • before(:all) crochets (remarque c'est un utilisateur de puissance fonction de RSpec qui doit être rarement utilisé; je ne l'ai utilisé à quelques reprises dans de nombreuses années d'utilisation de RSpec)
  • around(:each) crochets
  • Partagée exemple des groupes
  • Partagé contextes
  • Riche de prise en charge des métadonnées qui peuvent être utilisés pour contrôler les exemples se faire, exemple de partage des groupes de contextes inclus dans les, exemple des groupes de modules mixtes et plus.
  • Support intégré pour une large gamme de se moquer de fonctionnalités w/ rspec-se moque; Minitest::Maquette est beaucoup plus simple et plus limitée en comparaison.
  • RSpec a rspec-le-feu, qui est génial.

Avantages de l'utilisation de Minitest:

  • Il est intégré dans la bibliothèque standard de sorte que vous n'avez pas besoin d'installer quoi que ce soit de plus.
  • Il peut être utilisé en def test_blah ou it 'blah' styles.
  • Le code de base est très petit et simple. RSpec, en raison de son âge avancé et de fonctionnalités supplémentaires, est plus grande en comparaison.
  • Minitest charge plus rapidement que RSpec (c'est environ 4 fichiers de code par rapport à RSpec avoir beaucoup de fichiers répartis sur 3 gemmes) - mais notez que RSpec est pas lent; dans la plupart de mes projets de ces jours, je reçois test de la rétroaction de RSpec en moins d'une seconde (et souvent en moins de 500 ms).

Dans l'ensemble, c'est un peu comme Sinatra vs Rails, et je pense que Minitest et RSpec sont à la fois fines de choix en fonction de vos besoins.

Une dernière chose: si il y a des aspects spécifiques de Minitest vous aimez mieux, mais d'autres choses que vous aimez mieux sur RSpec, ils peuvent facilement être mélangés et combinés. J'ai écrit un billet de blog sur ce, si vous êtes intéressé.

4voto

Boris Stitnicky Points 5409

Je me suis converti à la spec-style Minitest de Test/Unit avec shoulda, et elle est payante. Il fait disparaître les passe-partout et ils disent qu'il améliore également la vitesse. Je n'ai jamais vraiment utilisé RSpec. Au lieu de cela, j'ai écrit mes propres tests basiques et se moquant de cadre (juste pour le but de comprendre les moqueries, je l'ai abandonné sur la commutation de Minitest). Je pense que stubbing/moqueur dans RSpec pourraient être plus avancé, si vous avez déjà appris, il suffit de continuer à l'utiliser. Sinon, tenez-vous avec Minitest, ce qui vous permettra de collaborer avec des gens ignorants de RSpec, comme moi.

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