[java] PowerMock에서의 지연된 응답 모킹

PowerMock은 자바 프레임워크에서 유닛 테스트를 작성할 때 도움이 되는 도구입니다. 이 도구는 Mockito와 결합하여 모킹(mocking)을 수행할 수 있으며, 메서드 호출에 대한 응답을 모킹함으로써 테스트 결과를 예측할 수 있습니다.

흔히 테스트 중에 외부 시스템과의 통신을 흉내내기 위해 응답을 모킹하는 경우가 많습니다. 이때 PowerMock을 사용하면 응답의 딜레이(delay)를 제어할 수 있어 실제 시나리오를 모델링하기 좋습니다.

지연된 응답 모킹하기

PowerMock에서 지연된 응답을 모킹하려면 org.powermock.api.mockito.PowerMockito 클래스의 when 메서드를 사용해야 합니다.

import org.powermock.api.mockito.PowerMockito;

// ...

PowerMockito.when(mockObject.methodCall()).thenAnswer(new Answer<Object>() {
    public Object answer(InvocationOnMock invocation) throws Throwable {
        Thread.sleep(1000); // 1초간 대기
        // 응답 값 반환
    }
});

위의 예제에서는 mockObject.methodCall() 메서드가 호출될 때 1초간 대기한 뒤 응답 값을 반환합니다. thenAnswer 메서드를 사용하여 응답 값을 반환하며, Answer 인터페이스를 구현하여 원하는 로직을 작성할 수 있습니다.

지연된 응답 모킹을 사용하면 실제 시스템과 상호 작용하는 테스트를 수행할 때 대기 시간 등을 모델링할 수 있다는 장점이 있습니다.

참고 자료