簡體   English   中英

如何擴展Ruby Test :: Unit斷言以包含assert_false?

[英]How to extend Ruby Test::Unit assertions to include assert_false?

顯然,Test :: Unit中沒有assert_false 如何通過擴展斷言並添加文件config/initializers/assertions_helper.rb添加它?

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

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

如果你正在使用MiniTest(在Ruby 1.9+中替換了Test :: Unit),那么你可以使用refute方法,它是assert的反轉方法。

我個人認為名稱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為零(!nil為真,我們可能希望assert_false(nil)失敗)將無效。 所以這是對false的直接比較。

Rails 4有assert_not可以做你想要的。

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

只需在你聲稱的內容中添加一聲巨響:

assert !(something_false)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM