在ruby中,你可以在irb中执行assert_equal和其他断言吗?

Chr*_*ris 12 ruby testunit

你能从irb中执行assert_equal吗?这不起作用.

require 'test/unit'
assert_equal(5,5)
Run Code Online (Sandbox Code Playgroud)

Joh*_*and 31

你当然可以!

require 'test/unit'
extend Test::Unit::Assertions
assert_equal 5, 5                # <= nil
assert_equal 5, 6                # <= raises AssertionFailedError
Run Code Online (Sandbox Code Playgroud)

发生了什么是所有断言都是Test :: Unit :: Assertions模块中的方法.从irb内部扩展该模块使得这些方法可用作类方法main,这允许您直接从irb提示符调用它们.(实际上,extend SomeModule在任何上下文中调用都会将该模块中的方法放在某个可以从同一个上下文中调用它们的位置 - main恰好就是默认情况下的位置.)

此外,由于断言被设计为从a内部运行TestCase,因此语义可能与预期稍有不同:它返回nil或引发错误,而不是返回true或false.


小智 8

正确的答案是,

require 'test/unit/assertions'

include Test::Unit::Assertions
Run Code Online (Sandbox Code Playgroud)


And*_*imm 5

你也可以这样做

raise "Something's gone wrong" unless 5 == 5
Run Code Online (Sandbox Code Playgroud)

我不在assert正在测试的代码中使用它,我只在测试代码中使用它。