2012-07-08 68 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