在MiniTest中assert_predicate有什么用?

del*_*pha 3 ruby minitest

我有一个问题,了解assert_predicateMiniTest 的用处.它与assert_equal?何时想要使用这个断言有什么不同?我已经多次遇到它,但并没有真正得到它的确切含义.

Chr*_*tom 10

assert_equal 检查预期值和实际值是否相等:

assert_equal "Bender", robot.name
Run Code Online (Sandbox Code Playgroud)

assert_predicate 在目标对象上调用named方法,如果结果是真实的则传递:

assert_predicate robot, :bender?
Run Code Online (Sandbox Code Playgroud)

您可以轻松地将此测试编写为:

assert robot.bender?
Run Code Online (Sandbox Code Playgroud)

但是assert_predicate在某些情况下可以更具表现力,并且在检查多个谓词条件时可以更好一些:

roles = %i(admin? publisher? operator?)
roles.each {|role| assert_predicate user, role }
Run Code Online (Sandbox Code Playgroud)

  • 它还在发生故障时提供更好的错误消息。 (3认同)