這可能是東西,是已知最,但令我感到驚訝的測試代碼執行順序。使用scalatest時FunSpec和BeforeAndAfter
鑑於以下測試:
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測試,我們在beforeAll
創建的網絡驅動器的方式 - 鉤在測試中使用它。只要我們在describe
塊初始化lazy val
S和使用它們it
塊中有沒有問題,因爲計算被推遲到it
,其中狀態beforeAll
已經執行。當我們第一次引入一些在describe
塊中計算出來的東西時,自然會出現問題,並依賴於網絡驅動程序(目前尚未構建)。
您是否嘗試用* info()*替換* println()*? – Beryllium