1

我有以下要模拟的特征:

trait TraitA extends TraitB {
   private lazy val internalObject = new ServiceA()
   internalObject.setSomeVal("someVal")
   internalObject.setSomeOtherval("someOtherVal")
   private lazy val anotherObject = new ServiceB()

   def functionA(paramA: typeB): typeC = {
       // some code using internalObject & anotherObject
   } 
}

使用 ScalaMock 时,我尝试做

val mockTraitA = mock[TraitA]

java.lang.NullPointerException由于存在私有惰性 val,它可能无法正确初始化此特征的模拟版本而失败?

初始化这种特征的正确方法是什么?

4

1 回答 1

1

对于mockTraitA,该行将internalObject.setSomeVal...在 trait 的构造函数运行时执行。不幸的是,没有办法阻止这种情况。

如果可以,请尝试重构为:

private lazy val internalObject = {
  val t = new ServiceA
  t.setSomeVal("someVal")
  t.setSomeOtherval("someOtherVal")
  t
}
于 2017-11-04T17:57:50.657 回答