2011-06-23 63 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参数置于相反的顺序。我会给答案添加一个例子。 –

相关问题