[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 메소드를 테스트할 수 있습니다.

참고 문헌: