콘텐츠로 건너뛰기

power mock 사용법 (final class의 테스트)

mockito에서 final class에 대한 mock은 생성이 불가능하다.

예를 들면, shindig library에서 HttpResponse.java가 있는데..

public HttpResponse() {}

HttpResponse(HttpResponseBuilder builder) {

}

private HttpResponse(int httpStatusCode, String body) {

}

public HttpResponse(String body) {
this(SC_OK, body);
}

위 클래스는 final 클래스이고, 생성자는 default 접근자를 사용했다.

물론 public 생성자도 있지만, body만 조작이 가능하다.

final 클래스여서 mock은 생성 불가능하고,

생성자를 이용해서 header를 set 해줄수없고,

setHeader()라는 메소드를 제공하지 않는다.

즉, header를 조작하고 싶은 경우에 방법이 없다.

이 때, powermock이라는 것을 사용할 수 있다.

원리는 찾아보지 않아서 정확히 알 수는 없으나…

mockito와 호환되어, 몇 가지 어노테이션만 사용하면 편리하게 mock을 생성할 수 있다.

Runner 클래스만 변경하고,

PrepareForTest라는 어노테이션으로 mock 생성할 final 클래스를 선언해주면 된다.

나머지는 기존에 mockito에서 사용하던대로 사용할 수 있다.

@RunWith(PowerMockRunner.class)
@PrepareForTest(HttpResponse.class)
public class ProxyHandlerTest {
private ProxyHandler dut;
    @Mock
private HttpResponse response;

@Test
public void whenNotFlashHeaderBuilder() {

}

}

maven dependency 에 다음을 추가하면 된다.

<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.4.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.4.9</version>
<scope>test</scope>
</dependency>

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다