2011-06-23 99 views

回答

75

你是第一個要求這樣的功能。一個方法來實現這一點與withClue。喜歡的東西:

withClue("NumberOfElements: ") { NumberOfElements() should be (5) } 

這應該讓你這個錯誤信息:

NumberOfElements:如果你想控制消息,完全可以編寫自定義的匹配10不等於5

。或者你可以使用這樣的斷言:

assert(NumberOfElements() == 5, "NumberOfElements should be 5") 

你可以詳細說明你的用例是什麼嗎?爲什麼10不等於5不符合鼻菸,你多久有這種需求?

這裏是你的要求的那種東西:

scala> import org.scalatest.matchers.ShouldMatchers._ 
import org.scalatest.matchers.ShouldMatchers._ 

scala> withClue ("Hi:") { 1 + 1 should equal (3) } 
org.scalatest.TestFailedException: Hi: 2 did not equal 3 
at org.scalatest.matchers.Matchers$class.newTestFailedException(Matchers.scala:150) 
at org.scalatest.matchers.ShouldMatchers$.newTestFailedException(ShouldMatchers.scala:2331) 


scala> class AssertionHolder(f: => Any) { 
    | def withMessage(s: String) { 
    |  withClue(s) { f } 
    | } 
    | } 
defined class AssertionHolder 

scala> implicit def convertAssertion(f: => Any) = new AssertionHolder(f) 
convertAssertion: (f: => Any)AssertionHolder 

scala> { 1 + 1 should equal (3) } withMessage ("Ho:") 
org.scalatest.TestFailedException: Ho: 2 did not equal 3 
at org.scalatest.matchers.Matchers$class.newTestFailedException(Matchers.scala:150) 
at org.scalatest.matchers.ShouldMatchers$.newTestFailedException(ShouldMatchers.scala:2331) 

所以這樣你可以寫:

{ NumberOfElements() should be (5) } withMessage ("NumberOfElements:") 
+0

在有些情況下,我不得不把一個以上的斷言在它的情況下( )測試並且有多個整數比較。通過查看斷言失敗的日誌並不清楚。 –

+0

但withClue指定它的方式是不可讀的。最後沒有指定消息的方法嗎? –

+1

最後不能使用匹配器的DSL,但可以編寫一個方法,將withClue參數置於相反的順序。我會給答案添加一個例子。 –

相關問題