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

Mockito는 자바에서 유닛 테스트를 할 때 가상의 객체를 만들어 사용하는 라이브러리입니다. 하지만 Mockito는 기본적으로 인스턴스 메소드의 동작을 모의(mock)하는 데에 사용됩니다. 따라서 Mockito로 정적 메소드를 직접적으로 모의하는 것은 불가능합니다.

정적 메소드를 모의(mock)해야 하는 상황에서는 PowerMock라는 라이브러리를 사용할 수 있습니다. PowerMock은 Mockito와 함께 사용되며 정적 메소드, 생성자, final 클래스 등을 모의(mock)할 수 있게 해줍니다.

아래는 PowerMock를 사용하여 정적 메소드를 호출하는 예제입니다.

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import static org.powermock.api.mockito.PowerMockito.when;

@RunWith(PowerMockRunner.class)
@PrepareForTest(YourClassWithStaticMethod.class)
public class YourTestClass {

    @Test
    public void testYourMethod() {
        // Given
        PowerMockito.mockStatic(YourClassWithStaticMethod.class);
        
        // Mock the behavior of the static method
        when(YourClassWithStaticMethod.yourStaticMethod()).thenReturn("Mocked result");
        
        // When
        String result = YourClassWithStaticMethod.yourStaticMethod();
        
        // Then
        Assert.assertEquals("Mocked result", result);
    }
}

위의 예제에서는 YourClassWithStaticMethod라는 클래스의 yourStaticMethod라는 정적 메소드를 모의(mock)하고 있습니다. @PrepareForTest 어노테이션을 사용하여 모의(mock) 대상 클래스를 지정하고, PowerMockito.mockStatic 메소드를 사용하여 해당 클래스를 모의(mock)합니다. 그리고 when 메소드를 사용하여 모의(mock) 메소드의 동작을 정의합니다.

PowerMock는 기능이 강력하기 때문에 사용하기 전에 잘 고려해보시고, 필요한 경우 Mockito와 함께 사용하는 방법을 고려해보세요.

참고 문헌: