66
有誰知道如何在ScalaTest中顯示自定義失敗消息?如何在ScalaTest中顯示自定義失敗消息?
例如:
NumberOfElements() should equal (5)
顯示以下消息,當它出現故障:
10不等於5
但我想更多的描述性信息,如:
N umberOfElements應該是5.
有誰知道如何在ScalaTest中顯示自定義失敗消息?如何在ScalaTest中顯示自定義失敗消息?
例如:
NumberOfElements() should equal (5)
顯示以下消息,當它出現故障:
10不等於5
但我想更多的描述性信息,如:
N umberOfElements應該是5.
你是第一個要求這樣的功能。一個方法來實現這一點與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:")
在有些情況下,我不得不把一個以上的斷言在它的情況下( )測試並且有多個整數比較。通過查看斷言失敗的日誌並不清楚。 –
但withClue指定它的方式是不可讀的。最後沒有指定消息的方法嗎? –
最後不能使用匹配器的DSL,但可以編寫一個方法,將withClue參數置於相反的順序。我會給答案添加一個例子。 –