如何在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:")