2011-11-24 52 views
5

Test :: Unit中顯然沒有assert_false。你如何通過擴展斷言並添加文件config/initializers/assertions_helper.rb來添加它?如何擴展Ruby Test :: Unit斷言以包含assert_false?

這是最好的方法嗎?我不想修改test/unit/assertions.rb

順便說一句,我不認爲這是多餘的。我正在使用assert_equal false, something_to_evaluate。這種方法的問題在於很容易意外地使用assert false, something_to_evaluate。這總是會失敗,不會拋出錯誤或警告,並將錯誤引入測試。

+1

@B七,你有沒有看到這個[鏈接](http://www.natontesting.com/2009/07/21/add-assert_false-to-rubys-testunit/)? –

+0

什麼鏈接? ... –

+1

http://www.natontesting.com/2009/07/21/add-assert_false-to-rubys-testunit/,工作鏈接是一個超鏈接,但看到上面的相同。 –

回答

3

只需添加在你的斷言什麼前面一聲巨響:

assert !(something_false) 
9

如果您使用MINITEST(Ruby的1.9+更換測試::單位),那麼你可以使用refute方法,該方法是assert的倒數。

+0

這是正確的答案 – joncodo

4

我個人認爲名字assert_falserefute更好,因爲它與所有其他的斷言一致,這也是通常使用的語義(類似於使用if !condition代替unless)更一致。

如果你有同樣的感覺,並希望assert_false,它加入test/test_helper.rb

class ActiveSupport::TestCase 

    ... 

    def assert_false(test, message="Expected: false. Actual: #{test}.") 
    assert_equal false, test, message 
    end 

end 

編輯:!需要注意的是assert !test(其他地方的建議)如果test爲零是行不通的(零是真實的,我們可能想要assert_false(nil)失敗)。所以這是直接比較false

4

Rails 4有assert_not這是你想要的。

test "requires valid url" do 
    @mymodel.url = "bogus!" 
    assert_not @mymodel.valid? 
end