[java] PowerMock에서의 환경 변수 모킹

환경 변수는 자바 애플리케이션에서 사용되는 중요한 구성 요소입니다. 하지만 테스트 시에는 실제 환경 변수를 사용하기보다는 가짜 값으로 모킹하여 제어할 수 있습니다. 이를 가능하게 해주는 도구 중 하나가 PowerMock입니다.

PowerMock은 모의 객체(Mock Object)를 생성하고 동작을 변경하거나 모의 객체가 호출되는지 여부를 검증할 수 있는 기능을 제공합니다. 환경 변수 모킹을 위해서는 PowerMock의 PowerMockito.mockStatic() 메서드를 사용하여 System.getenv() 메서드를 모킹해야 합니다.

아래는 PowerMock을 사용하여 환경 변수를 모킹하는 예제 코드입니다.

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.junit.Assert.assertEquals;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;

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

    @Test
    public void testGetEnvironmentVariable() {
        // 가짜 환경 변수 값을 세팅
        String expectedValue = "mocked value";
        mockStatic(System.class);
        when(System.getenv("MY_ENV_VAR")).thenReturn(expectedValue);

        // 애플리케이션에서 환경 변수 값을 읽어오는 로직 테스트
        String actualValue = MyClass.getEnvironmentVariable("MY_ENV_VAR");

        // 모킹된 값을 실제 값과 비교
        assertEquals(expectedValue, actualValue);
    }
}

위 예제 코드에서 MY_ENV_VAR 환경 변수에 대한 가짜 값을 세팅하고, MyClass.getEnvironmentVariable() 메서드를 호출하여 실제 값과 비교합니다. PowerMock의 mockStatic() 메서드를 이용하여 System 클래스를 모킹하고, when() 메서드를 사용하여 System.getenv() 메서드가 호출될 때 가짜 값을 반환하도록 설정합니다.

이렇게 PowerMock을 사용하여 환경 변수를 모킹하면 실제 환경 변수 값을 사용하지 않고도 손쉽게 테스트할 수 있습니다.

참고 자료