共有された例の例は、ユーザー ガイドにあります。基本的に、これは、特定のインスタンスを取るメソッドを定義して、その例をテストおよび宣言できるという事実を利用しています (nonEmptyStack
メソッドを参照)。
これが役に立ったら、 mutable を使用した簡単な例から始めましょうSpecification
。
import org.specs2._
class SubclassesSpec extends mutable.Specification {
"These examples must pass for all subclasses" >> {
subclasses foreach { subclass => examples(subclass) }
}
/** @return instances of subclasses of type T where T is
* the supertype of the classes you want to test */
def subclasses: Seq[T] = ...
/** @return examples parameterized by a specific instance */
def examples(t: T) = {
"this is the first example" >> {
// use t here
}
"this is the second example" >> {
// use t here
}
}
}
その前に確認する必要があるのは、例間の副作用の可能性だけです。上記の仕様では、すべての例が同時に実行され、同じオブジェクトを共有しています。問題が発生した場合は、次のいずれかを実行できます。