Czy można wykonać assert_equal z wewnątrz irb? To nie działa.Czy w Ruby możesz wykonywać assert_equal i inne asserts w irb?
require 'test/unit'
assert_equal(5,5)
Czy można wykonać assert_equal z wewnątrz irb? To nie działa.Czy w Ruby możesz wykonywać assert_equal i inne asserts w irb?
require 'test/unit'
assert_equal(5,5)
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.
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.
poprawną odpowiedzią jest,
require 'test/unit/assertions'
include Test::Unit::Assertions
Wow. wspaniały!! po przeszukaniu w całym Internecie. Znalazłem to rozwiązanie. @ Nilesh – Aravin
To było idealne. Dziękuję za szybką odpowiedź. Wystarczy usunąć wyceny po wyciągu rozszerzającym. – Chris
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). –
Jeśli chcesz zwrócić wartość true/false w IRB, użyj zamiast tego = =. 5 == 5 # => prawda 5 == 6 # => fałsz –