2012-09-06 2 views
4

가능한 중복 조롱하는 방법 : 나는 클래스 XX의 정적 메소드를 사용하는 기존의 단위 테스트 작업입니다
jmock mocking a static methodJmock - 정적 메서드를

합니다. 이제 Spring 애플리케이션 컨텍스트에서 필드 값을 가져 오기 위해 클래스를 변경했습니다. 이제 클래스 XX를 초기화 할 수 없으므로 단위 테스트가 실패합니다.

테스트 할 논리가 복잡하고 클래스 XX에 대한 호출이 다른 레거시 클래스에 대한 호출의 다중 레이어 내에 중첩되어 있기 때문에 클래스 XX를 dummysupport 클래스로 래핑 할 수 없습니다. 그래서 클래스 클래스 XX 내에서 정적 메서드를 조롱하는 방법을 찾으려고 노력하고 있습니다. 이 방법이 있나요? Jmock 라이브러리를 사용하고 있습니다.

답변

4

JMock에서 정적 메서드를 모방하는 방법이없는 것처럼 보입니다. this related thread을 참조하십시오. JMock의 제작자는 코드에 정적 메서드가 있으면 코드가 JMock을 사용하여 테스트 할 가치가 없다는 엘리트주의 견해를 갖고있는 것처럼 보입니다.

JMockit과 같은 도구를 사용하면 더 많은 기능을 갖춘 조롱 도구 세트를 사용할 것을 제안합니다. 내가 powermock을 보라

+0

오 ... 그런 경우 Jmock과 Jmockit가 togather 작업을 할 수 있습니다. 기존 테스트는 jmock을 사용하여 기능을 테스트합니다. 이제 클래스 XX를 JmockIt과 조롱하고 다른 모의 객체 (Jmock)가 이것을 사용할 수 있습니까? – maverik

+2

와우, @ 제프, 통계학의 남용이 때로는 디자인 문제의 징조라고 제안하는 것을 '엘리트 주의자'라고 부르는 것 같습니다. 그리고 저는 JMock (결코 사용하지 않았습니다)을 변호하지 않습니다. 그 이유에 동의하지 않더라도 엘리트주의 성명서가 아닌 디자인 방식에 맞지 않습니다. "시험받을 가치가 없다 ..."나는 드라마와 유머에 +1을 줄 것이다. –

+2

@ 케빈 ... 아니, 꽤 정확하다고 생각합니다. Steve Freeman과 같은 진술은 "우리의 설계 방식에 맞지 않기 때문에 jMock에서 정적 메서드를 조롱하는 것을 지원하지 않습니다."라는 링크 된 질문을했습니다. 제 생각에 그것은 엘리트 주의자라고 생각합니다 ... 기본적으로 정적으로 코드를 테스트하려는 사용자에게 말하면 미안하지만 잘못하고있는 것입니다. –

1

나는 또한 과거에이 문제를 가지고 있고 그것이 내가하는 방법이 아닌 정적하고 있지만 정적을함으로써 JMock을 사용할 수 있습니다 주위에 코드를 관리해야 당신이 상세한 here

으로 정적을 조롱 할 수 있습니다 클래스에 대한 참조.

public ClassToMock { 
    public static final ClassToMock INSTANCE = new ClassToMock(); 

    private ClasstToMock() {}; 

    public void newNonStaticMethod1(){} 
} 

대신

public ClassToMock { 

    public ClasstToMock() {}; 

    public void static origStaticMethod1(){} 
} 

예를

를 들어

지금 당신의 메서드 호출() newNonStaticMethod1로

ClassToMock.INSTANCE.newNonStaticMethod1(); 

될 지금이 조롱 할 수 notn 정적 것이다.

CalssToMockCtor는 비공개이므로 정적 인스턴스를 통해서만 액세스 할 수 있습니다.

관련 문제