2010-10-03 1 views

Odpowiedz

26

Na pewno możesz!

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

Co się dzieje, że wszystkie twierdzenia są metodami w module Test :: Unit :: Asssertions. Rozszerzenie tego modułu z wewnątrz irb udostępnia te metody jako metody klasy na main, co pozwala na wywołanie ich bezpośrednio z wiersza poleceń. (Naprawdę, wywołanie extend SomeModule w dowolnym kontekście spowoduje umieszczenie metod w tym module, gdzie można je wywoływać z tego samego kontekstu - domyślnie jest to miejsce, w którym domyślnie się znajdujesz.)

Ponadto, ponieważ twierdzenia zostały zaprojektowane tak, aby były uruchamiany z poziomu TestCase, semantyka może być trochę inna niż oczekiwano: zamiast zwracania wartości true lub false zwraca zero lub powoduje błąd.

+1

To było idealne. Dziękuję za szybką odpowiedź. Wystarczy usunąć wyceny po wyciągu rozszerzającym. – Chris

+0

Ups, to jest to, co otrzymuję, bo go nie testuję. :-) Naprawiono i uzupełniono trochę więcej wyjaśnień (dla ciebie lub przyszłych widzów). –

+0

Jeśli chcesz zwrócić wartość true/false w IRB, użyj zamiast tego = =. 5 == 5 # => prawda 5 == 6 # => fałsz –

4

Można również zrobić

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

Nie używać assert w kodzie, który jest w fazie testów, używam go tylko w kodzie testowym.

5

poprawną odpowiedzią jest,

require 'test/unit/assertions' 

include Test::Unit::Assertions 
+0

Wow. wspaniały!! po przeszukaniu w całym Internecie. Znalazłem to rozwiązanie. @ Nilesh – Aravin