15

你可以在 irb 中执行 assert_equal 吗?这不起作用。

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

3 回答 3

34

你当然可以!

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

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

此外,由于断言被设计为在 a 中运行TestCase,语义可能与预期略有不同:它不是返回 true 或 false,而是返回 nil 或引发错误。

于 2010-10-03T15:04:48.623 回答
9

正确答案是,

require 'test/unit/assertions'

include Test::Unit::Assertions
于 2014-01-20T11:26:01.647 回答
5

你也可以做

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

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

于 2010-10-03T21:55:20.047 回答