これは、ほとんどの人が知っていることかもしれませんが、私は驚きました。
次のテストがあるとします。
import org.scalatest.{BeforeAndAfterAll, FunSpec}
class MyFunSpecTest extends FunSpec with BeforeAndAfterAll {
override def beforeAll {
println("Inside beforeAll")
}
describe("Testing something") {
println("Inside describe")
it("should fail") {
println("Inside it")
fail("not yet implemented")
}
}
}
私は出力を予想していたでしょう:
Inside beforeAll
Inside describe
Inside it
[info] MyFunSpecTest:
[info] Testing something
[info] - should fail *** FAILED ***
[info] not yet implemented (MyFunSpec.scala:12)
代わりに、出力は次のとおりです。
Inside describe
Inside beforeAll
Inside it
[info] MyFunSpecTest:
[info] Testing something
[info] - should fail *** FAILED ***
[info] not yet implemented (MyFunSpec.scala:12)
これは、少なくとも scalatest_2.9.1 バージョン 2.0.M5b および 2.0.M5 で発生します。
これを発見した方法は、Selenium テストで Web ドライバーをbeforeAll
フックに作成し、それをテストで使用することでした。lazy val
ブロック内で sを初期化し、describe
ブロック内でそれらを使用する限り、状態が既に実行されているit
まで計算が遅れたため、問題はありませんでした。ブロックで計算され、Web ドライバー (この時点では構築されていません) に依存するものを初めて導入したときに、問題が自然に発生しました。it
beforeAll
describe