さて、私のコメントで述べたように、私は実際にこの同じ問題を抱えていました。フィルター処理されていないエンドポイントをテストする必要がありましたが、各仕様の最善の方法は、単一のエンドポイントでフィルター処理されていないサーバーを起動し、仕様を実行してからサーバーをシャットダウンすることでした。これを実現するために、まず次のような基本仕様を定義しました。
import org.specs2.mutable.Specification
abstract class SpecificationBase extends Specification{
//Do setup work here
step{
println("Doing setup work...")
success
}
//Include the real spec from the derived class
include(spec)
//Do shutdown work here
step{
println("Doing shutdown work...")
success
}
/**
* To be implemented in the derived class. Returns the real specification
* @return Specification
*/
def spec:Specification
}
基本的に、この基本クラスは、実際の仕様 (具体的な仕様クラスで定義されている) を間に挟んで、セットアップ ステップとティアダウン ステップとして完全な仕様を組み立てます。したがって、この基本クラスを使用したテストは次のようになります。
class MySpec extends SpecificationBase{ def spec =
new Specification{
"A request to do something" should{
"be successful in case 1" in {
println("Testing case 1")
success
}
"be successful in case 2" in {
println("Testing case 2")
success
}
}
}
}
これを実行すると、次のように表示されます。
Doing setup work...
Testing case 1
Testing case 2
Doing shutdown work...
完璧ではありませんが、機能します。これを行う別の(そして可能な限りクリーン/より良い)方法はありますか?おそらくですが、これは使用を検討できる 1 つのソリューションです。