[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를 사용하여 시스템 프로퍼티를 모킹하는 방법은 다음과 같습니다.
@RunWith(PowerMockRunner.class)
어노테이션을 테스트 클래스에 추가합니다.@PrepareForTest(System.class)
어노테이션을 테스트 클래스에 추가하여 System 클래스가 모킹 대상임을 알립니다.PowerMock.mockStatic(System.class)
을 사용하여 System 클래스의 static 메서드들을 모킹합니다.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를 활용하면 테스트에서 외부 의존성을 쉽게 모킹할 수 있어 유닛 테스트 작성을 더욱 편리하고 강력하게 만들어 줍니다.