14

いくつかのケースを含む簡単な仕様があります。

class MySpec extends Specification {

  "Something" should {

    "case 1" in {
      ...
    }

    "case 2" in {
      ...
    }
  }
}

ここで、アプリケーションを開始し、すべてのケースを実行して、アプリケーションをシャットダウンする必要があります。アプリケーションの開始/停止には時間がかかるため、各ケースで発生させたくありません。

ケースが開始される前、およびすべてのケースが終了した後にコードを実行するにはどうすればよいですか?

4

4 に答える 4

7

さて、私のコメントで述べたように、私は実際にこの同じ問題を抱えていました。フィルター処理されていないエンドポイントをテストする必要がありましたが、各仕様の最善の方法は、単一のエンドポイントでフィルター処理されていないサーバーを起動し、仕様を実行してからサーバーをシャットダウンすることでした。これを実現するために、まず次のような基本仕様を定義しました。

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 つのソリューションです。

于 2013-06-05T12:03:53.323 に答える