[java] PowerMock에서의 HTTP 응답 모킹

PowerMock는 자바 기반의 테스트 프레임워크로서, 모킹(mocking)과 스텁(stubbing) 기능을 제공합니다. 이를 활용하여 HTTP 응답을 모킹하는 방법을 알아보겠습니다.

1. 의존성 추가

먼저, Maven 또는 Gradle을 사용하는 프로젝트의 경우, PowerMock과 관련 라이브러리를 추가해야 합니다. 다음은 Maven을 사용하는 경우의 의존성 설정 예시입니다.

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

Gradle을 사용하는 경우에는 다음과 같이 의존성을 추가할 수 있습니다.

testImplementation 'org.powermock:powermock-module-junit4:2.0.9'
testImplementation 'org.powermock:powermock-api-mockito2:2.0.9'

2. HTTP 요청과 응답 모킹

PowerMock를 사용하여 HTTP 요청과 응답을 모킹하기 위해서는 테스트 대상 클래스의 정적 메서드(static method)를 모킹해야 합니다.

import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.when;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest({YourClassWithHttpMethods.class})
public class YourTestClass {

    @Test
    public void testHttpMocking() {
        mockStatic(YourClassWithHttpMethods.class);
        
        when(YourClassWithHttpMethods.sendHttpRequest()).thenReturn("Mocked Response");
        
        // 테스트 코드 작성
    }
}

위 예시에서는 YourClassWithHttpMethods라는 클래스의 sendHttpRequest()라는 정적 메서드를 모킹하고 있습니다. 모킹된 메서드는 “Mocked Response”라는 값을 반환하도록 설정되어 있습니다.

PowerMock의 mockStatic() 메서드를 사용하여 정적 메서드를 모킹하고, when().thenReturn() 메서드를 사용하여 모킹된 메서드의 반환값을 설정합니다.

3. 테스트 실행

이제 테스트를 실행하면, 모킹된 HTTP 응답을 받는 코드를 테스트할 수 있습니다. 모킹된 값을 사용하여 테스트 코드를 작성하면 됩니다.

@Test
public void testHttpMocking() {
    // ...

    String response = YourClassWithHttpMethods.sendHttpRequest();
    
    // 모킹된 응답에 대한 테스트 코드 작성
    assertEquals("Mocked Response", response);
}

결론

PowerMock를 사용하여 HTTP 응답을 모킹하는 방법을 살펴보았습니다. 이를 통해 테스트 코드를 작성하면, 외부 서비스와의 의존성을 줄이고 효율적인 유닛 테스트를 수행할 수 있습니다.

더 자세한 내용은 PowerMock 공식 문서를 참고하시기 바랍니다.