specs2 で、「親」テストが例外をスローせずに結果を返した場合にのみ実行されるサブテストのパターンを表現する適切な方法は何ですか?
functionmaybeGiveMeAThing
があり、 を返すか、Thing
例外をスローすることができます。
呼び出しは次のようになります。
val thing: Thing = maybeGiveMeAThing("foo", "bar" "baz"
)
特定の入力セットをmaybeGiveMeAThing
使用して、例外をスローせずに Thing を正常に返すことをテストし、返された Thing を使用して、さらにテストを行い、 にThing
指定されたパラメーターに対して正しいものが返されることを確認しますmaybeGiveMeAThing
。
テストを現在セットアップしている方法では、への呼び出しがmaybeGiveMeAThing
例外をスローすると、テスト スイート全体が中止されます。これは私が好むロジックです:
- a
Thing
が正常に返された場合は、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 ...
}
// ...
}
...しかし、これは正しい方法とはかけ離れているように感じます。適切な方法は何ですか?
(できれば s の使用は避けたいと思いvar
ます。)