我有以下特征,我想嘲笑:
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
}