В ruby ​​вы можете выполнить assert_equal и другие утверждения, находясь в irb? - PullRequest
12 голосов
/ 03 октября 2010

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

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

Ответы [ 3 ]

31 голосов
/ 03 октября 2010

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

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 или вызывает ошибку.

8 голосов
/ 20 января 2014

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

require 'test/unit/assertions'

include Test::Unit::Assertions
4 голосов
/ 04 октября 2010

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

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

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

...