В ruby вы можете выполнить assert equal и другие утверждения, находясь в irb?

можете ли вы выполнить assert_equal из irb? Это не работает.

require 'test/unit'
assert_equal(5,5)

3 ответов


конечно, вы можете!

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

происходит то, что все утверждения являются методами в модуле Test::Unit::Assertions. Расширение этого модуля изнутри irb делает эти методы доступными как методы класса на main, что позволяет вызывать их непосредственно из вашего приглашения irb. (Действительно, зову extend SomeModule в любом контексте поместит методы в этот модуль, где вы можете вызвать их из того же контекста -main просто случилось быть там, где вы находитесь по умолчанию.)

кроме того, поскольку утверждения были разработаны для запуска из TestCase, семантика может немного отличаться от ожидаемой: вместо возврата true или false она возвращает nil или вызывает ошибку.


правильный ответ:

require 'test/unit/assertions'

include Test::Unit::Assertions

вы также можете сделать

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

Я не использую assert в тестируемом коде я использую его только в тестовом коде.