如何避免在BeforeAll中使用var

时间:2016-09-12 13:26:19

标签: scala mutable specs2

当变量的初始化发生在beforeAll方法中时(即在对象实例化之后),有没有办法避免使用var?

我想支持不变性......

e.g。 https://github.com/holdenk/spark-testing-base/blob/master/src/main/1.3/scala/com/holdenkarau/spark/testing/SharedSparkContext.scala

2 个答案:

答案 0 :(得分:0)

最适合您的方法是:

lazy val x: Type = _
override def beforeAll = {
  x = //you code
}

答案 1 :(得分:0)

你可以使用外部伴侣对象来实现这一点,scala将确保只有其中一个:

object SparkContextProvider {
    val sparkContext: SparkContext = {
         val sc = new SparkContext(conf)
         setup(_sc)
         sc
    }
}

你测试代码会有

trait SharedSparkContext extends SparkContextProvider {
   val sc = SparkContextProvider.sparkContext
}