ScalaMock:通过惰性 val 模拟具有初始化的特征



我有以下特征,我想嘲笑:

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,因为由于私人懒人瓦尔的存在,它可能无法正确初始化此特征的模拟版本?

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

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

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

private lazy val internalObject = {
  val t = new ServiceA
  t.setSomeVal("someVal")
  t.setSomeOtherval("someOtherVal")
  t
}

相关内容

  • 没有找到相关文章

最新更新