我有一个实现BeforeAndAfter
的测试套件,理想情况下我希望能够检查我的after()
方法,如果测试失败,并且它确实计算了一些值,打印出来。是否有内置的方式来做到这一点?
PS。我知道我可以尝试/捕捉整个测试,但我宁愿不必这样做。
答案 0 :(得分:4)
我认为您无法在after()
中执行此操作,但您可以通过覆盖withFixture()
来完成此操作。此方法运行实际测试,之后您可以匹配结果并在出现故障时打印一些内容:
class ExampleSpec extends WordSpec with MustMatchers {
"Example" must {
"work correctly" in {
3 must be(3)
}
"not fail" in {
true must be(false)
}
}
override def withFixture(test: NoArgTest) = super.withFixture(test) match {
case failed: Failed =>
val nameLen = test.name.length
info(s"The test '${test.name}' failed")
info(s"The test name is $nameLen characters long")
failed
case other => other
}
}
请参阅Sharing Fixtures,尤其是“Overriding withFixture(NoArgTest)”
部分答案 1 :(得分:1)
根据您的需要,您可以:
1)写一些类似def around[T](code: => T) = try {code} ...
的内容并使用它:
test("mytest") {
around {
}
}
it should "blabla" in around {
...
}
2)如果您不使用规格,那么只需编写自己的规范:
def mytest[T](name: String)(code: =>T) = test(name){
try {
code
} ...
}
或只是覆盖test
:
override def test[T](name: String)(code: =>T) = super.test(name){
try {
code
} ...
}
两者都可以在单独的特征中完成,顺便说一句。
3)覆盖{@ 1}},如描述@ alextsc的回答
4)如果要拦截构建中的所有测试,请编写自己的reporter
P.S。 BeforeAndAfter / withFixture旨在清理资源(这就是为什么它们不会给你任何异常访问权限),所以如果你需要分析并重新表示你的错误,那么逻辑上的记者解决方案可能更合适,但这并不方便。