[java] PowerMock에서의 전역 변수 모킹

PowerMock은 Java 단위 테스트를 위한 도구로서, 모킹 및 스텁 객체를 사용하여 격리된 테스트 환경을 구축할 수 있게 해줍니다. PowerMock을 사용하여 전역 변수를 모킹하는 방법에 대해 알아보겠습니다.

PowerMock 설치하기

PowerMock을 사용하기 위해서는 먼저 해당 라이브러리를 프로젝트에 추가해야 합니다. Maven을 사용한다면 pom.xml 파일에 다음 의존성을 추가하세요:

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-core</artifactId>
    <version>2.0.9</version>
    <scope>test</scope>
</dependency>

Gradle을 사용한다면 build.gradle 파일에 다음 종속성을 추가하세요:

testImplementation 'org.powermock:powermock-core:2.0.9'

전역 변수 모킹하기

아래 예제에서는 GlobalClass라는 클래스의 전역 변수를 모킹하는 방법을 보여줍니다.

public class GlobalClass {
    public static String globalVariable = "originalValue";
    
    public static String getGlobalVariable() {
        return globalVariable;
    }
}

전역 변수 globalVariable을 모킹하여 getGlobalVariable() 메서드를 테스트하고 싶다고 가정해봅시다.

PowerMock에서는 PowerMockito.mockStatic() 메서드를 사용하여 전역 클래스를 모킹할 수 있습니다. 다음은 전역 변수를 모킹하는 예제입니다:

import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.mockito.Mockito.when;

@RunWith(PowerMockRunner.class)
@PrepareForTest(GlobalClass.class)
public class GlobalClassTest {

    @Test
    public void testGetGlobalVariable() {
        mockStatic(GlobalClass.class);
        when(GlobalClass.getGlobalVariable()).thenReturn("mockedValue");
        
        String result = GlobalClass.getGlobalVariable();
        assertEquals("mockedValue", result);
    }
}

위의 예제에서는 GlobalClass를 모킹하기 위해 PowerMockRunner를 사용하고, @PrepareForTest 어노테이션을 통해 테스트 대상 클래스를 지정합니다. 그리고 mockStatic() 메서드를 사용하여 GlobalClass를 모킹한 후, when() 메서드를 통해 모킹된 값을 설정합니다.

이제 GlobalClass.getGlobalVariable() 메서드를 호출하면 모킹된 값인 “mockedValue”를 반환하게 됩니다.

결론

PowerMock를 사용하여 전역 변수를 모킹하는 방법에 대해 알아보았습니다. PowerMock은 격리된 테스트 환경을 구축하는 데 도움이 되는 강력한 도구입니다. 전역 변수를 모킹하여 테스트를 더욱 효율적이고 견고하게 만들 수 있습니다.