2016-11-09 5 views
0

함수를 테스트하려고하는데, 테스트하고있는 함수가 스텁하고자하는 traits 함수를 호출합니다. ScalaMock을 사용하여이 함수를 스텁 (stub)하는 것처럼 보이지 않습니다. 객체를 모의 할 수 없기 때문입니다. ScalaMock 개체의 상속 된 특성 ScalaTest

trait[A<:CommonReturn] commonTrait[A] { 
    def commonFunction(s:String):(String,String) = { 
     ("Hello","World") 
    } 
    def testMe(s:String) : A 
} 

이 특성

다음 여러 객체 각각 commonTrait을 구현하는 일반적인 수익의 특정 하위 유형을 반환하여 확장됩니다.

object ob extends commonTrait[ConcreteType] { 
    override def testMe(s:String){ 
     val(x,y) = commonFunction(s) 
     val z = "unique logic" 
     ConcreteType(x,y,z) 
    } 
} 

나는 그러므로 지금 그러나 나는 그러므로 commonFunction 스텁 수없는, 산부인과 개체를 모의 할 수없는 것 ob.testMe 테스트하기 위해 노력하고 있습니다.

내 아키텍처 때문입니까? 아니면 scalamock으로 객체를 조롱하고 scalatest를 사용할 수 있습니까?

val mocked = mock[ob] 
(mocked.commonFunction _).expect(*).returning("test","test") 

이것은 컴파일되지 않습니다.

+0

commonFunction이 예제의 testMe 외부에 있으면 동일한 문제가 발생합니까? – Barry

답변

0

모의 [X]는 X의 하위 클래스이기 때문에 ScalaMock으로 객체를 모의 할 수 없습니다. 스칼라는 객체의 하위 클래스를 허용하지 않습니다.

commonFunction과 공동 작업을 테스트해야하는 경우 상속으로 인해 다소 어려워집니다. 나는 이것을 Dependency Injection으로 대신 설계하는 것을 고려할 것이다.