6
votes

Comment inclure des tests d'unité dans un module Ruby?

J'essaie d'inclure les tests d'unité pour un module dans le même fichier source que le module lui-même, en suivant le PERL MODULINO modèle. XXX

MAINTENANT, je peux exécuter les tests d'unité exécutant ce fichier source.

mais , ils sont également exécutés lorsque j'exige / les charger d'un autre script. Comment cela peut-il être évité?

Y a-t-il un moyen plus idiomatique d'y parvenir avec Ruby, à moins que cette pratique ne soit découragée?


0 commentaires

4 Réponses :


13
votes

Personnellement, je n'ai jamais entendu parler de personne qui essaie de le faire à Ruby. Ce n'est certainement pas une pratique standard. Qui a dit que vous pourriez être en mesure de tirer parti de cette astuce: xxx

le code dans le bloc si n'exécutera que si le fichier est exécuté directement, non si elle est requise par Une autre bibliothèque ou application.

Plus de tours rubis ici: http: //www.rubyInside.com/21-Ruby-tricks-902.html


4 commentaires

Je trouve une façon pratique de travailler sur (généralement) de petits modules indépendants quand ils sont toujours "jeunes" - surtout quand je travaille dans un éditeur dans lequel je peux exécuter immédiatement (comme Scite). C'est évidemment moins d'un problème dans lequel vous avez des corps plus grands de code et / ou de l'autotest. Mais je ne vis pas dans ce monde ;-)


THANSK, cela fonctionnerait avec un module standard (normal?), Mais cela ne fonctionne pas avec des tests d'unités car ils sont exécutés automatiquement. +1 pour le lien


Vous pouvez mettre le nécessiter «test / unité»


J'avais pensé que vous pourriez faire ce que suggère @baroquebobcat. Cela empêcherait test / unité d'être une dépendance lorsque vous n'exécutez pas de tests.



3
votes

Ce n'est en fait pas que ce n'est pas rare à Ruby, cependant, ce n'est certainement pas la pratique courante dans les rails.

L'un des problèmes que vous pouvez courir est le même que Ce message , qui est que les modules devraient vraiment être inclus dans les classes afin de les tester. Il est certainement possible de tester un module en incluant celui-ci dans votre cas de test, mais vous testez si le module fonctionne lorsqu'il est mélangé dans le test :: Unité :: Testcase, pas que cela fonctionnera lorsque vous le mélangez dans quelque chose de plus utile.

Les tests unitaires devraient probablement vivre dans le fichier de classe ou si vous voulez simplement que vous souhaitiez que les méthodes généralement disponibles utilisent une fonction de classe au lieu d'un module.


0 commentaires

1
votes

Il suffit de trouver un moyen d'empêcher le test de l'unité d'être exécuté lorsque le module est requis à partir d'un script. Il y a un drapeau dans unité.rb dans ... / lib / ruby ​​/ 1.8 / test / pour définir sur true.

combiné avec Samg Trick (merci encore), nous pouvons écrire: xxx


0 commentaires

3
votes

Vous pouvez inclure des tests unitaires à l'intérieur du code source du module lui-même à l'aide de Minitest.

Essayez cet exemple: p>

ruby foo.rb


0 commentaires