[java] Mockito를 사용하여 객체의 private 메소드를 테스트하는 방법은?
아래는 Mockito를 사용하여 객체의 private 메소드를 테스트하는 방법의 예시입니다.
import org.mockito.Mockito;
import org.junit.Assert;
import java.lang.reflect.Method;
public class ExampleClassTest {
@Test
public void testPrivateMethod() throws Exception {
ExampleClass example = new ExampleClass();
// private 메소드의 이름과 매개변수 타입을 지정하여 Method 객체를 가져옵니다.
Method privateMethod = ExampleClass.class.getDeclaredMethod("privateMethod", int.class);
// private 메소드를 호출하기 위해 접근성을 변경합니다.
privateMethod.setAccessible(true);
// Mockito를 사용하여 모의 객체를 생성합니다.
ExampleClass mockExample = Mockito.spy(example);
// 모의 객체의 메소드를 호출하여 private 메소드를 간접적으로 호출합니다.
int result = (int) privateMethod.invoke(mockExample, 5);
// private 메소드의 반환값을 검증합니다.
Assert.assertEquals(10, result);
}
}
위의 예시에서는 ExampleClass
라는 클래스의 privateMethod()
를 테스트합니다. ExampleClass
의 private 메소드를 호출하기 위해 자바의 Reflection API를 사용하여 Method 객체를 가져옵니다. 그런 다음, setAccessible(true)
를 호출하여 private 메소드에 접근합니다. 이렇게 접근성을 변경한 뒤에는 Mockito의 spy() 메소드를 사용하여 모의 객체를 생성하고, 모의 객체의 메소드를 호출하여 private 메소드를 간접적으로 호출할 수 있습니다. 마지막으로, private 메소드의 반환값을 검증하기 위해 Assert를 사용합니다.
이 방법을 사용하면 Mockito를 활용하여 자바 객체의 private 메소드를 테스트할 수 있습니다.
참고 문헌: