如何在ScalaTest中显示自定义的失败消息?

有谁知道如何在ScalaTest中显示自定义的失败消息?

例如:

NumberOfElements() should equal (5) 

失败时显示以下消息:

10不等于5

但是我想要更多的描述性信息:

NumberOfElements应该是5。

你是第一个要求这样的function。 一个方法是用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:")