[java] Mockito를 사용하여 정적 메소드를 모킹하는 방법은?

Mockito는 자바에서 테스트 더블을 만들기 위해 많이 사용되는 프레임워크입니다. 하지만 Mockito는 기본적으로 정적 메소드의 모킹을 지원하지 않습니다.

정적 메소드를 모킹하기 위해 Mockito에서 제공하는 방법은 없지만, PowerMockito라는 Mockito의 확장 라이브러리를 사용하면 정적 메소드의 모킹이 가능해집니다.

PowerMockito를 사용하여 정적 메소드를 모킹하는 방법은 다음과 같습니다.

  1. PowerMockito 라이브러리를 프로젝트에 추가합니다.

Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다.

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>2.0.7</version>
    <scope>test</scope>
</dependency>
  1. @RunWith 어노테이션을 사용하여 PowerMockRunner를 테스트 클래스에 지정합니다.
import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
public class MyTest {
    // 테스트 코드 작성
}
  1. @PrepareForTest 어노테이션을 사용하여 테스트하려는 클래스의 정적 메소드가 포함된 클래스를 지정합니다.
import org.junit.Test;
import org.powermock.core.classloader.annotations.PrepareForTest;
import static org.powermock.api.mockito.PowerMockito.*;

@PrepareForTest({MyClassWithStaticMethod.class})
public class MyTest {
    // 테스트 코드 작성
}
  1. mockStatic 메소드를 사용하여 정적 메소드를 모킹합니다.
import org.junit.Test;
import org.powermock.core.classloader.annotations.PrepareForTest;
import static org.powermock.api.mockito.PowerMockito.*;

@PrepareForTest({MyClassWithStaticMethod.class})
public class MyTest {
    @Test
    public void testStaticMethod() {
        mockStatic(MyClassWithStaticMethod.class);
        when(MyClassWithStaticMethod.staticMethod()).thenReturn("mocked value");
        
        // 테스트 코드 작성        
    }
}

위와 같이 PowerMockito를 사용하여 정적 메소드를 모킹할 수 있습니다. 하지만 PowerMockito를 사용하는 것은 코드 복잡성을 증가시킬 수 있으므로, 신중하게 사용해야 합니다.