2010-10-03 5 views

Répondre

26

Bien sûr vous pouvez!

require 'test/unit' 
extend Test::Unit::Assertions 
assert_equal 5, 5    # <= nil 
assert_equal 5, 6    # <= raises AssertionFailedError 

Ce qui se passe est que toutes les assertions sont des méthodes dans le module Test :: Unit :: Assertions. L'extension de ce module depuis l'intérieur d'irb rend ces méthodes disponibles en tant que méthodes de classe sur main, ce qui vous permet de les appeler directement à partir de votre invite irb. (Vraiment, appeler extend SomeModule dans n'importe quel contexte mettra les méthodes dans ce module quelque part vous pouvez les appeler du même contexte - main se trouve justement être où vous êtes par défaut.)

De plus, puisque les assertions ont été conçues pour être Exécuter à partir de TestCase, la sémantique peut être un peu différente de celle attendue: au lieu de retourner vrai ou faux, il renvoie nil ou déclenche une erreur.

+1

C'était parfait. Merci pour la réponse rapide. Juste nécessaire pour supprimer les citations après l'instruction extend. – Chris

+0

Oups, c'est ce que je reçois pour ne pas le tester. :-) Correction et rempli un peu plus d'explications (pour vous ou les futurs spectateurs). –

+0

Si vous voulez renvoyer true/false dans IRB, utilisez plutôt ==. 5 == 5 # => vrai 5 == 6 # => faux –

4

Vous pouvez également faire

raise "Something's gone wrong" unless 5 == 5 

Je n'utilise assert dans le code qui est en cours de test, je ne l'utilise que dans le code de test.

5

La bonne réponse est,

require 'test/unit/assertions' 

include Test::Unit::Assertions 
+0

Wow. génial!! après avoir cherché partout sur internet. J'ai trouvé cette solution. @ Nilesh – Aravin

Questions connexes