为什么 'assert_not' 而不是 '!'在编写 Rails 测试时?

Why 'assert_not' and not '!' when writing Rails tests?

考虑这个例子,我们想检查是否允许用户使用空白名称(不应该):

test "name should be present" do
    @user.name = "     "
    assert_not @user.valid?
end

问题是assert_not为什么存在?如果我们像这样使用 assert 不是更好吗:

test "name should be present" do
    @user.name = "     "
    assert !@user.valid?
end

它可能存在用于从您的断言中删除修饰符,这可能会改变它们的结果或模糊您的实际要求。实际上,这主要是一种风格选择。

这与在语言中使用 unless 的动机相同,而不是这样写:

if !@user.valid?
  # do stuff
end

你会做:

unless @user.valid?
  # do stuff
end

诚然,if/unless 差异 assert_not,唉,这就是 Minitest 单元测试将为您提供的。如果您希望阅读起来更自然,请查看 Minitest 规格或 RSpec.