[java] PowerMock에서의 외부 REST API 호출 모킹

PowerMock은 Java의 mock 프레임워크 중 하나로, 외부 리소스와 상호작용하는 코드를 테스트할 때 매우 유용합니다. 이번 가이드에서는 PowerMock를 사용하여 외부 REST API 호출을 모킹하는 방법에 대해 알아보겠습니다.

필요한 의존성 추가

먼저 프로젝트의 빌드 파일에 PowerMock와 Mockito 의존성을 추가해야 합니다. Gradle을 사용하는 경우 build.gradle 파일에 다음 의존성을 추가해주세요:

dependencies {
    testCompile('org.powermock:powermock-module-junit4:2.0.4')
    testCompile('org.powermock:powermock-api-mockito2:2.0.4')
}

Maven을 사용하는 경우 pom.xml 파일에 다음 의존성을 추가해주세요:

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

코드 예제

다음은 외부 REST API 호출을 하는 ApiClient 클래스입니다:

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;

public class ApiClient {

    public String fetchDataFromApi(String url) {
        Client client = ClientBuilder.newClient();
        return client.target(url)
                .request(MediaType.APPLICATION_JSON)
                .get(String.class);
    }
}

위의 코드에서 fetchDataFromApi 메소드는 주어진 URL에서 JSON 데이터를 가져옵니다.

이제 PowerMock와 Mockito를 사용하여 ApiClientfetchDataFromApi 메소드를 모킹해보겠습니다:

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(ApiClient.class)
public class ApiClientTest {

    @Test
    public void testFetchDataFromApi() {
        ApiClient mockApiClient = PowerMockito.mock(ApiClient.class);
        PowerMockito.when(mockApiClient.fetchDataFromApi("http://example.com/api/data"))
                .thenReturn("{\"name\": \"John\", \"age\": 30}");

        // 테스트할 코드 작성

        PowerMockito.verify(mockApiClient).fetchDataFromApi("http://example.com/api/data");
    }
}

위의 코드에서 @RunWith(PowerMockRunner.class) 어노테이션은 PowerMockRunner를 사용하여 테스트를 실행하도록 지정합니다. 또한 @PrepareForTest(ApiClient.class) 어노테이션은 모킹할 클래스를 사전에 준비하도록 지정합니다.

testFetchDataFromApi 메소드에서는 모킹된 ApiClient 객체를 생성하고, fetchDataFromApi 메소드가 주어진 URL에서 정상적으로 데이터를 가져오도록 모킹합니다. 그리고 나서 테스트할 코드를 작성하고, 마지막으로 PowerMockito.verify를 사용하여 fetchDataFromApi 메소드가 주어진 URL로 호출되었는지 검증합니다.

결론

PowerMock를 사용하여 외부 REST API 호출을 모킹하는 방법을 살펴보았습니다. 이를 통해 외부 리소스와의 상호작용을 모킹하여 테스트 코드를 더욱 강력하고 견고하게 만들 수 있습니다. 상황에 맞게 PowerMock를 사용하여 테스트 코드를 작성해보세요!

참고 자료