2016-10-25 1 views
0

다음의 (단순화 된) 예제에서, scalamock으로 클래스의 필드를 상속하는 형질의 값을 어떻게 스터핑 할 수 있습니까?scalamock으로 형형색색을 바꾼다

trait MyTrait extends MyClass 
class MyClass(val location: Location) 

val expectedValue = ??? 
val dor: MyTrait = stub[MyTrait] 
(dor.location.continuousFeatureValues).returns(expectedValue) 

답변

0

'location'은 MyClass의 매개 변수 또는 MyClass의 데이터 멤버입니까? 그것은 죽은의 비트가, 나는 그 코드를 리팩토링 것

//source code 
class Location { 
    def continuousFeatureValues: String = "location" 
} 

class MyClass() { 
    val location: Location = new Location 
} 

class MyTrait extends MyClass 

// test code 
it should "mock" in { 
    val loc = mock[Location] 
    val dor: MyTrait = new MyTrait {override val location = loc} 
    (loc.continuousFeatureValues _).expects().returning("good") 
    dor.location.continuousFeatureValues shouldBe ("good") 
} 
+0

location은 생성자의 매개 변수와 필드 멤버입니다. MyClass를 인스턴스화하고 나중에이를 사용합니다 - 사례 클래스와 유사하지만 사례 클래스는 아닙니다. 이 솔루션은 실제 프로그램을 변경해야 할 필요가있는 것으로 보이며 테스트를 위해이 작업을 수행하고 싶지 않습니다. – Make42

0

:이 정상이면

class MyClass() { 
    val location: Location = new Location 
} 

, 당신은 해결 방법으로 위치를 재정의 할 수는 OK로 MyClass에를 변경하는 것입니다 기본이 아닌 생성자를 사용하여 클래스를 확장하는 특성으로 끝납니다. 해당 클래스를 직접 모방 한 경우 val이므로 여전히 위치에 대한 작업을 정의 할 수 없으며 스칼라에서는 불변입니다. defMyTrait으로 설정하고 MyClass extend MyTrait으로 설정하면 디자인이 더 간단하고 (모의이되어야합니다.)