如何使用具有可变 specs2 规范的自定义消息?
How can I use custom messages with mutable specs2 specifications?
我似乎无法让 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
}
}
}
我只收到默认的失败消息 "the value is true"。这是在 specs2 3.8.5 上通过 Maven 使用 JUnitRunner。我还没有在 sbt 项目上尝试过这个。我能找到的文档表明这应该有效。
--- 编辑 ---
某种解决方法:true.aka("this should PRINT").must(beFalse) // works
在实践中用于描述复杂的故障时,打印出来的效果有点难看,但至少它打印出来了,所以我可以添加必要的额外上下文以更容易地理解故障。
这里的主要问题是您使用的是可变规范。在可变规范中,当结果不正确时会抛出异常。在这种情况下,甚至在您尝试设置不同的消息之前,测试都会失败(使用原始消息)。
您有 2 个选择:
在匹配器本身上设置消息
false must beTrue.setMessage("ko")
用org.specs2.execute.AsResult
捕获结果
(这会捕获异常)
AsResult(false must beTrue).updateMessage("ko")
您还会注意到 API 到 set/update 消息略有不同,具体取决于 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")
我似乎无法让 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
}
}
}
我只收到默认的失败消息 "the value is true"。这是在 specs2 3.8.5 上通过 Maven 使用 JUnitRunner。我还没有在 sbt 项目上尝试过这个。我能找到的文档表明这应该有效。
--- 编辑 ---
某种解决方法:true.aka("this should PRINT").must(beFalse) // works
在实践中用于描述复杂的故障时,打印出来的效果有点难看,但至少它打印出来了,所以我可以添加必要的额外上下文以更容易地理解故障。
这里的主要问题是您使用的是可变规范。在可变规范中,当结果不正确时会抛出异常。在这种情况下,甚至在您尝试设置不同的消息之前,测试都会失败(使用原始消息)。
您有 2 个选择:
在匹配器本身上设置消息
false must beTrue.setMessage("ko")
用
org.specs2.execute.AsResult
捕获结果 (这会捕获异常)AsResult(false must beTrue).updateMessage("ko")
您还会注意到 API 到 set/update 消息略有不同,具体取决于 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")