这可能是大多数人都知道的事情,但让我感到惊讶。
鉴于以下测试:
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
中创建了Web驱动程序 - 钩子并在测试中使用它。只要我们在lazy val
块中初始化describe
并在it
块中使用它们就没有问题,因为计算延迟到it
,其中状态为{{1}已经执行了。我们第一次引入在beforeAll
块中计算并依赖于Web驱动程序(此时未构造)的内容时,自然会出现问题。
答案 0 :(得分:0)
before()在每个it()之前调用,而不是在每个describe()之前调用。尝试将代码移动到它()并告诉我们是否有帮助。