如何扩展Ruby Test :: Unit断言以包含assert_false?

B S*_*ven 5 ruby unit-testing ruby-on-rails assertions ruby-on-rails-3

显然assert_false,Test :: Unit中没有.如何通过扩展断言和添加文件来添加它config/initializers/assertions_helper.rb

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

顺便说一句,我不认为这是多余的.我在用assert_equal false, something_to_evaluate.这种方法的问题在于它很容易被意外使用assert false, something_to_evaluate.这将始终失败,不会抛出错误或警告,并邀请错误进入测试.

Jak*_*era 10

如果您正在使用MiniTest(在Ruby 1.9+中替换了Test :: Unit),那么您可以使用该refute方法,它与之相反assert.


mah*_*off 5

我个人觉得这个名字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
Run Code Online (Sandbox Code Playgroud)

编辑:请注意assert !test(在其他地方建议)如果test为 nil(!nil 为真,我们可能想要assert_false(nil)失败)将不起作用。所以这是与 的直接比较false


Rog*_*ger 3

只需在您声明的内容前面添加一个感叹号即可:

assert !(something_false)
Run Code Online (Sandbox Code Playgroud)