2011-03-23 6 views
8

나는 일부 연구를 통해 PowerMock이 정적 Java 메서드를 모의 할 수 있다는 것을 알았습니다.정적 메서드 조롱

누군가가 PowerMock이 JUnit과 다른 기능을 수행 할 수 있는지 설명 할 수 있습니까? 또한 정적 방법이 모의하려고 할 때 왜 문제를 일으키는 지 이유는 무엇입니까? 인스턴스 메서드를 조롱하기 위해

감사

답변

12

http://blog.jayway.com/2009/05/17/mocking-static-methods-in-java-system-classes/

, 당신은 단순히 서브 클래스에서 재정의 할 수 있습니다. "정적 다형성"이 없으므로 정적 메서드로는이를 수행 할 수 없습니다.

Powermock은 바이트 코드와 작동하기 때문에 할 수 있습니다. 다른 인기있는 프레임 워크는 다형성에 의존하고 CGLIB로 하위 클래스를 만듭니다.

링크에서 : "기본적으로 모든 표준 모의 프레임 워크는 모의 객체를 만들기 위해 CGLib을 사용합니다. 즉, 계층 적 모델 (CGLib은 런타임에 테스트 할 클래스의 하위 클래스를 만듭니다. 실제 모의 개체) 대신 MockGateway에 위임하여 바이트 코드 조작을 통해 PowerMock에서 사용하는 위임 모델을 사용합니다. "