我似乎无法获取specs2来打印任何自定义消息。
import org.junit.runner.RunWith
import org.specs2.mutable.Specification
import org.specs2.runner.JUnitRunner
@RunWith(classOf[JUnitRunner])
class MessageSpecs extends Specification {
"This" should {
"fail" in {
true.must(beFalse).setMessage("this should PRINT")
//true.must(beFalse.setMessage("this should PRINT")) // or maybe this? no.
//true.must(beFalse).updateMessage(_ => "this should PRINT") // not this either
}
}
}
我只是得到默认的失败消息“值为true”。这是在specs2 3.8.5上使用JUnitRunner通过maven。我还没有在sbt项目上试过这个。我能找到的文件表明这应该有效。
---编辑---
一种解决方法:true.aka("this should PRINT").must(beFalse) // works
当在实践中用于描述复杂的故障时,打印有点难看,但至少它打印,所以我可以添加必要的附加上下文,以便更容易理解故障。
答案 0 :(得分:3)
这里的主要问题来自于您使用的是可变规范。在可变规范中,当结果不正确时抛出异常。在这种情况下,在您甚至尝试设置不同的消息之前,测试失败(使用原始消息)。
您有两个选择:
在匹配器上设置消息
false must beTrue.setMessage("ko")
使用org.specs2.execute.AsResult
捕获结果
(这会导致异常)
AsResult(false must beTrue).updateMessage("ko")
您还会注意到,根据MatchResult
(有匹配的实体)和Result
(即更一般的概念)。前者使用setMessage
,后者使用updateMessage
。
而且,为了记录,还有其他方法可以为给定的失败添加更多信息:
使用aka
来描述您注意到的实际值
使用句子来描述完整的期望
"Values are correct" ==> {
values must beCorrect
}
创建一个新的匹配器
def myMatcher: Matcher[Int] = (i: Int) =>
(test(i), s"what's wrong with $i")