2017-11-03 15 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 아마도 개인용 게으른 val의 존재로 인해이 특성의 모의 버전을 제대로 초기화 할 수 없으므로?

이러한 특성을 초기화하는 올바른 방법은 무엇일까요?

답변

0

mockTraitA의 경우 특성의 생성자가 실행될 때 internalObject.setSomeVal... 줄이 실행됩니다. 불행히도 그것을 막을 방법이 없습니다.

당신이에 리팩토링을 시도 할 수있는 경우 :

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