2010-07-16 4 views
17

Je veux utiliser les assertions et mettre valuidations dans mon code ruby ​​(par exemple: vérifier si un fichier zip est créé, étiquette est présent, message dans la zone de texte, etc). J'ai mis quelques déclarations d'affirmation comme assert @selenium.is_text_present(textMessage), mais ils ne fonctionnent pas.comment mettre assertions dans le code ruby ​​

S'il vous plaît laissez-moi savoir si n'importe quelle gemme rubis pour les assertions doit être installé.

+2

S'il vous plaît, assurez-vous que vous avez lu le [Guide formatage] (http://stackoverflow.com/editing-help), avis que nous sommes tous toujours amical, et c'est pourquoi nous sautons les parties habituelles "salut/merci" des messages, et - bienvenue à StackOverflow! –

+0

Pensez que c'est similaire - http://stackoverflow.com/questions/147969/is-it-idiomatic-ruby-to-add-an-assert-method-to-rubys-kernel-class – carrutherji

Répondre

24

Pour de simples AFFIRME, vous êtes mieux sans doute rouler votre propre méthode assert prendre un bloc:

ruby-1.9.1-p378 > class AssertionError < RuntimeError 
ruby-1.9.1-p378 ?> end 
=> nil 
ruby-1.9.1-p378 > def assert &block 
ruby-1.9.1-p378 ?> raise AssertionError unless yield 
ruby-1.9.1-p378 ?> end 
=> nil 
ruby-1.9.1-p378 > assert { 1 > 0 } 
=> nil 
ruby-1.9.1-p378 > assert { 5 == 12 } 
AssertionError: AssertionError 
    from (irb):8:in `assert' 
    from (irb):11 
    from /Users/mr/.rvm/rubies/ruby-1.9.1-p378/bin/irb:17:in `<main>' 

Sous forme copypastastable:

class AssertionError < RuntimeError 
end 

def assert &block 
    raise AssertionError unless yield 
end 

i = 1 
assert {i >= 0} 
assert { 5 == 12 } 
+2

Y at-il une raison d'utiliser un bloc en tant qu'argument au lieu d'un simple booléen? –

+0

Si la méthode assert vérifie une autre condition (par exemple 'si DEBUG_ENABLED') avant de faire le "raise ... sauf yield", alors si cette condition renvoie false, le rendement ne sera jamais invoqué, et donc le passé bloc ne sera jamais évalué. Si ce que le bloc fait est cher, cela pourrait avoir un grand effet sur le temps d'exécution du programme. –

Questions connexes