捕获断言语句的结果?

Vic*_*box 1 ruby testing unit-testing ruby-on-rails

我正在编写一个测试助手,它有这个方法:

def todo msg = ''
  assert false, '@TODO: ' + msg
end
Run Code Online (Sandbox Code Playgroud)

基本上我想要一种快速测试失败的方法.接下来,我想测试这个方法(因为它将封装在一个可发送的帮助器中).所以我想写这样的东西:

test 'todo' do
  result = todo
  expected = '@TODO: '
  assert_equal expected, result
end
Run Code Online (Sandbox Code Playgroud)

但它assert false被调用时失败了.那么,我该如何测试这种方法呢?

Ale*_*x D 5

这个助手应该可以使用Test::Unit,是吗?我相信会assert false引发一个异常Test::Unit.您可以将调用包装todo在一个begin...rescue块中并捕获该异常.

test/unit其中谈到在Ruby标准库实际上是Minitest::Unit-当断言失败,它提出了一个Minitest::Assertion例外.你可以rescue那样.

对于"真实" Test::Unit,它会Test::Unit::AssertionFailedError在断言失败时引发.