2012-01-14 5 views
0

메소드의 서브 세트를 오버라이드하고 나머지 메소드에 런타임 예외를 발생시키는 주어진 유형의 객체를 생성하는 방법이 있습니까?스칼라 모의 객체 생성

수퍼 클래스의 구현에 액세스 할 필요조차 없습니다. 그것은 단지 컴파일 타임과 런타임에서 같은 타입을 가질 필요가있다.

답변

6

모의 객체가 상자에서 꺼내는 것만 큼 - 예상치를 설정 한 방법은 기대치에 따라 무엇이든해야하며, 다른 모든 것은 ExpectationException을 던집니다.

사용 사례는 무엇입니까?

+0

구현되지 않은 모든 메소드에 대한 상용구 코드를 작성하고 싶지 않습니다 (dhg의 답변에 대한 설명 참조). 나는 scalamock이 충분하다고 생각한다. 그러나 외부 라이브러리에 갈 필요가 없다면 좋을 것입니다. – dsg

+0

PowerMockito에서 누군가가 MyClass 인스턴스를 새로 만들면 "new (MyClass) .thenReturn (mockMyClass)"패턴을 사용하여 실제 인스턴스 대신 mockMyClass를 수신 할 수 있습니다. ScalaMock에서 비슷한 작업을 수행 할 수 있습니까? 나는이 문제를 하루 종일 보냈다. –

3

Paul이 말했듯이 ScalaMock은 좋은 방법입니다.

하지만 당신은 그냥 기본 상속 설명하고 있다는 점을 지적하고 싶었 : 당신이 MockOriginalClass에 전달할 수있는 OriginalClass 객체를 기대했던 코드에서, 그리고

class OriginalClass { 
    def methodToRun() = { println("called OriginalClass.methodToRun") } 
    def methodNotToRun() = { println("called OriginalClass.methodNotToRun") } 
} 

class MockOriginalClass extends OriginalClass { 
    override def methodToRun() = super.methodToRun() 
    override def methodNotToRun() = throw new RuntimeException("you weren't supposed to run this!") 
} 

을하며 오류가 발생합니다 당신이 잘못한 것을 부를 때.

+0

주된 문제는 실행되지 않는 모든 메소드에 대한 상용구'throw new RuntimeException (...)'을 추가하고 싶지 않다는 것입니다. 너를 위해 채워진 언어 특징이 있다면 그것은 과냉각 일 것이다. – dsg

+0

나는 당신이 명시 적으로 말하지 않았다면 어떤 방법이 허용되었고 어떤 것이 허용되지 않았는지 시스템이 어떻게 알 수 있는지 약간 혼란 스럽다. '새로운 RuntimeException 던짐 '을 붙여 넣는 것은 너무 많은 일처럼 보이지 않습니다. – dhg

+0

기본값은 모든 메서드가 허용되지 않는다는 것입니다 (예외를 throw합니다). 다른 메소드의 구현을 지정합니다. – dsg