2015-10-06 27 views
2

我有一個問題,理解MiniTest中assert_predicate的用處。它與assert_equal?有什麼不同?什麼時候會想要使用這個斷言?我遇到過很多次,但沒有真正明確的意思。MiniTest中assert_predicate的用法是什麼?

+0

'assert_equal'會導致失敗時出現超級無用的消息,這些消息沿着「預期真實等於真實,但得到錯誤」。 –

+0

唯一的用法是對斷言失敗的更好的消息。這是所有額外的'assert_ *'方法的唯一用處 - 否則真正你需要的只是單個'assert'方法。這是失敗的消息不是太有用。 – jrochkind

回答

8

assert_equal檢查看到預期值和實際值是否相等:

assert_equal "Bender", robot.name 

assert_predicate調用你的目標對象上的命名方法,並將結果是否truthy:

assert_predicate robot, :bender? 

你可以就像同樣容易地寫這個測試一樣:

assert robot.bender? 

assert_predicate可以在某些情況下,多一點的表現力和檢查多個謂詞條件時,可以更好一點:

roles = %i(admin? publisher? operator?) 
roles.each {|role| assert_predicate user, role } 
2

documentation for the method本身可以回答你的問題:

對於謂詞測試。例如:

assert_predicate str, :empty?

這真的意味着規格和是前結束的assert_operator:

str.must_be :empty?

這表明的原因是爲了支持.must_be呼叫,而不是提供任何assert_equalassert的特定收益。

相關問題