0

これは、ほとんどの人が知っていることかもしれませんが、私は驚きました。

次のテストがあるとします。

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 ドライバー (この時点では構築されていません) に依存するものを初めて導入したときに、問題が自然に発生しました。itbeforeAlldescribe

4

1 に答える 1