Scala:测试结束后如何执行操作?

Scala: how can I perform actions when test are over?

我正在使用 scalatest_2.11 版本 2.2.1。我正在尝试在 SparkContext 上编写 运行 的测试。我如何在测试开始时启动 SparkContext,让这个 Sc 完成所有测试,然后在所有测试完成后停止它?

(我知道它应该会自己停止,但我还是喜欢自己做)

您可以使用 ScalaTest 中的 BeforeAndAfterAll。定义启动和停止 SparkContext 的基本特征,并将其用于其他测试。

trait SparkTest extends BeforeAndAfterAll {
  self: Suite =>

  @transient var sc: SparkContext = _

  override def beforeAll {
    val conf = new SparkConf().
      setMaster("local[*]").
      setAppName("test")
    sc = new SparkContext(conf)
    super.beforeAll()
  }

  override def afterAll: Unit = {
    try {
      sc.stop()
    } finally {
      super.afterAll
    }
  }

}

// Mix-in the trait with your tests like below.
class MyTest extends FunSuite with SparkTest {
  test("my test") {
    // you can access "sc" here.
  }
}