[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와 함께 사용하는 방법을 고려해보세요.
참고 문헌: