2

specs2 には 、 、 などの特性がBeforeありAfterAroundセットアップ/ティアダウン コードで例をラップできるようになっています。

ScalaCheck プロパティの各「反復」、つまり ScalaCheck によってテストされる各値または値のセットのテスト インフラストラクチャのセットアップと破棄をサポートするものはありますか?

specs2 のさまざまな Before、After、Around 特性は、specs2 Result インスタンスを返すかスローするように設計されているように見えますが、Prop は Result ではありません。

4

1 に答える 1

2

これは、最新の 1.12.2-SNAPSHOT で修正されています。あなたは今書くことができます:

import org.specs2.ScalaCheck
import org.specs2.mutable.{Around, Specification}
import org.specs2.execute.Result

class TestSpec extends Specification with ScalaCheck {
  "test" >> prop { i: Int =>
    around(i must be_>(1))
  }

  val around = new Around {
    def around[T <% Result](t: =>T) = {
      ("testing a new Int").pp
      try { t }
      finally { "done".pp }
    }
  }    
}

これにより、プロパティの「本体」の前後にコードが実行されます。

さらに一歩進んで、aroundPropsに暗黙的に渡すサポート メソッドを作成することもできます。

class TestSpec extends Specification with ScalaCheck {
  "test" >> propAround { i: Int =>
    i must be_>(1)
  }

  // use any implicit "Around" value in scope
  def propAround[T, R](f: T => R)
                      (implicit a: Around, 
                       arb: Arbitrary[T], shrink: Shrink[T], 
                       res: R => Result): Result =
    prop((t: T) => a(f(t)))

  implicit val around = new Around {
    def around[T <% Result](t: =>T) = {
      ("testing a new Int").pp
      try { t }
      finally { "done".pp }
    }
  }
}
于 2012-09-18T01:51:24.313 に答える