Je viens de regarder un Railscast pour Minitest.
Quels sont les avantages et les inconvénients d'utiliser RSpec vs Minitest pour tester une application Rails? Quelles fonctionnalités vais-je perdre lors de la conversion de RSpec en Minitest?
Je suis l'un des développeurs RSpec, et je n'ai jamais utilisé de minitest, alors tenez compte de mes biais lors de la lecture de cette réponse.
Dans l'ensemble, la puissance de RSpec vient du fait qu'il réifie tant de concepts de test en objets de première classe. Lorsque Test :: Unit et Minitest utilisent des méthodes simples pour faire des assertions, RSpec utilise des objets de correspondance de première classe qui prennent en charge la négation, l'auto-description et plus encore. Les exemples de RSpec sont des objets de première classe qui prennent en charge des métadonnées riches; minitest/spec compile les blocs it
en 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 construction de première classe (groupes d'exemples partagés) qui accepte des arguments; w/minitest vous pouvez utiliser héritage ou mixin pour réutiliser les tests , mais il n'a pas le même type de support de première classe. RSpec a une API de formateur explicite (et il existe de nombreux formateurs tiers qui l'utilisent); Je ne suis pas au courant que minitest ait le même type d'API de formateur de première classe.
En tant que personne qui effectue constamment des tests et pratique le TDD toute la journée, je trouve que la puissance que RSpec me donne est très utile. Cependant, beaucoup de gens trouvent cela excessif et il y a un coût cognitif supplémentaire pour les abstractions supplémentaires.
Voici quelques fonctionnalités spécifiques à RSpec qui, je pense, manquent au minitest:
before(:all)
hooks (notez que c'est une fonctionnalité utilisateur expérimenté de RSpec qui devrait rarement être utilisée; je ne l'ai utilisée qu'à quelques reprises depuis de nombreuses années d'utilisation de RSpec)around(:each)
crochetsAvantages d'utiliser Minitest:
def test_blah
ou it 'blah'
modes.Dans l'ensemble, c'est un peu comme Sinatra vs Rails, et je pense que Minitest et RSpec sont tous deux de bons choix en fonction de vos besoins.
Une dernière chose: s'il y a des aspects spécifiques de Minitest que vous préférez, mais d'autres choses que vous préférez dans RSpec, ils peuvent facilement être mélangés et appariés. I a écrit un article à ce sujet , si cela vous intéresse.
J'ai converti en Minitest de style spec à partir de Test/Unit
avec shoulda
, et ça rapporte. Il supprime le passe-partout et ils disent que cela améliore également la vitesse. Je n'ai jamais vraiment utilisé RSpec. Au lieu de cela, j'ai écrit mon propre cadre de test et de simulation primitif (juste pour comprendre la simulation, je l'ai abandonné lors du passage à Minitest). Je pense que le stubbing/mocking dans RSpec pourrait être plus avancé, donc si vous l'avez déjà appris, continuez à l'utiliser. Sinon, restez avec Minitest, qui vous permettra de collaborer avec des gens ignorants de RSpec, comme moi.