2012-07-08 38 views
1

我写一个测试助手,它有这个方法:捕获断言声明的结果?

def todo msg = '' 
    assert false, '@TODO: ' + msg 
end 

基本上我想有一个快速的方法来测试失败。接下来,我想测试这个方法(因为它将被封装在一个可交付的帮助器中)。所以,我想编写这样的事:

test 'todo' do 
    result = todo 
    expected = '@TODO: ' 
    assert_equal expected, result 
end 

,但它只是失败时assert false被调用。那么,我将如何测试这种方法?

回答

5

这个帮手应该和Test::Unit一起工作,是吗?我相信assert false会抛出一个被Test::Unit捕获的异常。您可以将电话打到todobegin...rescue区块并捕获该异常。

来自Ruby标准库的test/unit实际上是Minitest::Unit - 当断言失败时,会引发Minitest::Assertion异常。你可以rescue那。

对于“真实”Test::Unit,当断言失败时,会产生一个Test::Unit::AssertionFailedError

+0

是的这个工程;-) – 2012-07-08 09:58:49

+1

请注意,如果你想捕捉*任何*异常,你需要使用'救援例外',*不*只是'救援'。有一些例外情况不会被光秃秃的“救援”所捕获。 – 2012-07-08 09:59:17

+0

如果这可以帮助你,一个+1将不胜感激。 – 2012-07-08 09:59:45