2017-11-03 17 views
0

を経由して初期化を伴う形質をモックIきた私はモックとしたい以下の特性:ScalaMock:怠惰ヴァル

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おそらくプライベートレイジーヴァルの存在のためにこの特性のモックバージョンを適切に初期化することができないでしょうか?

このような特性を初期化する正しい方法は何でしょうか?

答えて

0

mockTraitAの場合、形質のコンストラクタが実行されると、internalObject.setSomeVal...という行が実行されます。残念ながらそれを防ぐ方法はありません。

あなたは、これにリファクタリングしようとすることができる場合は、次の

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