[java] PowerMock에서의 시스템 프로퍼티 모킹

PowerMock는 자바 개발자들에게 유용한 모의(mocking) 프레임워크 중 하나입니다. 이를 사용하면 테스트 중에 시스템 프로퍼티를 모킹하여 테스트 케이스에서 원하는 값을 가질 수 있습니다. 이 글에서는 PowerMock를 사용하여 시스템 프로퍼티를 모킹하는 방법을 알아보겠습니다.

PowerMock와 Mockito 의존성 추가

먼저 Maven이나 Gradle과 같은 빌드 도구를 사용하여 PowerMock와 Mockito를 다음과 같이 의존성에 추가해야 합니다.

<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'

시스템 프로퍼티 모킹하기

PowerMock를 사용하여 시스템 프로퍼티를 모킹하는 방법은 다음과 같습니다.

  1. @RunWith(PowerMockRunner.class) 어노테이션을 테스트 클래스에 추가합니다.
  2. @PrepareForTest(System.class) 어노테이션을 테스트 클래스에 추가하여 System 클래스가 모킹 대상임을 알립니다.
  3. PowerMock.mockStatic(System.class)을 사용하여 System 클래스의 static 메서드들을 모킹합니다.
  4. PowerMockito.when(System.getProperty("property_name")).thenReturn("mocked_value")을 사용하여 getProperty 메서드를 모킹하고 원하는 값을 반환하도록 설정합니다.

다음은 예제 코드입니다.

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

@RunWith(PowerMockRunner.class)
@PrepareForTest(System.class)
public class SystemPropertyTest {

    @Test
    public void testSystemPropertyMocking() {
        mockStatic(System.class);
        
        when(System.getProperty("property_name")).thenReturn("mocked_value");
        
        // 시스템 프로퍼티를 가져온 후에 원하는 값인 "mocked_value"를 얻을 수 있음
        String propertyValue = System.getProperty("property_name");
        // 원하는 어서션 추가
    }
}

위의 코드에서는 System.getProperty 메서드를 모킹하여 “property_name” 프로퍼티의 값을 “mocked_value”로 정의했습니다. 그리고 테스트 코드에서 다시 System.getProperty을 호출하여 모킹된 값을 확인합니다.

이와 같은 방식으로 PowerMock를 사용하여 시스템 프로퍼티를 모킹할 수 있습니다. PowerMock를 활용하면 테스트에서 외부 의존성을 쉽게 모킹할 수 있어 유닛 테스트 작성을 더욱 편리하고 강력하게 만들어 줍니다.

참고 자료