何时在具有 BeforeAndAfter 特性的 ScalaTest class 中调用 before() 和 after()

When do before() and after() get invoked within a ScalaTest class with BeforeAndAfter trait

考虑以下针对 BeforeAndAfterBeforeAndAfterAll 的最小可行自包含测试用例:

import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FunSuite}

class BeforeAndAfterTestTest extends FunSuite with BeforeAndAfter with BeforeAndAfterAll {

  override protected def beforeAll(): Unit = println("beforeAll")

  override protected def afterAll(): Unit = println("afterAll")

  override protected def before(fun: => Any)(implicit pos: Position): Unit = {
    println("before")
  }

  override protected def after(fun: => Any)(implicit pos: Position): Unit = {
    println("after")
  }

  test("hello1") { println("hello1") }

  test("hello2") { println("hello2") }
}

通过scalatest运行的结果是:

所以 :

调用 beforeafter 方法需要什么?

你应该调用beforeafter,而不是覆盖它们:

import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FunSuite}

class BeforeAndAfterTestTest extends FunSuite with BeforeAndAfter with BeforeAndAfterAll {

  override protected def beforeAll(): Unit = println("beforeAll")

  override protected def afterAll(): Unit = println("afterAll")

  before {
    println("before")
  }

  after {
    println("after")
  }

  test("hello1") { println("hello1") }

  test("hello2") { println("hello2") }
}

查看文档 here

如果你想要可覆盖的方法,你应该使用 BeforeAndAfterEach,而不是 BeforeAndAfter (doc)