在 specs2 中,表达仅在其“父”测试返回结果而不引发异常时才执行的子测试模式的正确方法是什么?
我有一个 function maybeGiveMeAThing
,它可以返回 a Thing
,也可以抛出异常。
调用如下所示:
val thing: Thing = maybeGiveMeAThing("foo", "bar" "baz"
)
我想用一组输入来测试它,它maybeGiveMeAThing
成功地返回一个 Thing 而不会引发异常,并使用返回的 Thing,做进一步的测试,以确保它是正确Thing
返回给maybeGiveMeAThing
.
我当前设置测试的方式,如果调用maybeGiveMeAThing
抛出异常,整个测试套件就会中止。这将是我更喜欢的逻辑:
- 如果 a
Thing
成功返回,则继续进行一组子测试来分析事物的内容 - 如果
maybeGiveMeAThing
抛出异常(任何异常),则跳过分析事物的子测试,但继续进行其余测试
我现有的测试代码大致如下:
// ...
"with good parameters" in {
var thing: Thing = null
"return a Thing without throwing an exception" in {
thing = maybeGiveMeAThing("some", "good", "parameters", "etc.")
} should not(throwA[Exception])
"the Thing returned should contain a proper Foo" in {
thing.foo mustBe "bar"
}
//... etc ...
}
// ...
}
...尽管这感觉与正确的做法相去甚远。什么是正确的方法?
(如果可以的话,我想避免使用var
s 。)