2010-07-16 11 views
17

Voglio usare le asserzioni e mettere le valutazioni nel mio codice rubino (ad es. Controllare se un file zip è stato creato, l'etichetta è presente, il messaggio nell'area di testo, ecc.). Ho inserito alcune dichiarazioni di asserzione come assert @selenium.is_text_present(textMessage), ma non funzionano.come mettere le asserzioni nel codice rubino

Per favore fatemi sapere se è necessario installare qualsiasi gemma di rubino per le asserzioni.

+2

favore, assicuri di aver letto il [Formattazione] (http://stackoverflow.com/editing-help), comunicazione che tutti noi siamo sempre amichevole, ed è per questo che saltiamo le solite parti "hi/thanks" dei messaggi, e - benvenuto su StackOverflow! –

+0

Pensa che questo è simile - http://stackoverflow.com/questions/147969/is-it-idiomatic-ruby-to-add-an-assert-method-to-rubys-kernel-class – carrutherji

risposta

24

Per semplice afferma, siete probabilmente meglio fuori posizionare il proprio metodo di assert prendere un blocco:

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>' 

Nella forma copypastastable:

class AssertionError < RuntimeError 
end 

def assert &block 
    raise AssertionError unless yield 
end 

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

C'è un motivo per usare un blocco come argomento invece di un semplice booleano? –

+0

Se il metodo di asserzione controlla qualche altra condizione (es. 'Se DEBUG_ENABLED') prima di eseguire "raise ... unless yield", allora se quella condizione restituisce false, il rendimento non verrà mai richiamato, e quindi il pass-in il blocco non verrà mai valutato. Se ciò che fa il blocco è costoso, questo potrebbe avere un grande effetto sul tempo di esecuzione del programma. –

Problemi correlati