[java] Mockito를 사용하여 특정 조건에 따라 다른 동작을 하는 메소드를 테스트하는 방법은?

Mockito는 자바에서 유닛 테스트를 작성할 때 많이 사용되는 모의 객체 프레임워크입니다. 이를 사용하여 특정 조건에 따라 다른 동작을 하는 메소드를 테스트할 수 있습니다. 아래는 Mockito를 사용하여 특정 조건에 따라 다른 동작을 하는 메소드를 테스트하는 방법을 설명한 예제 코드입니다.

import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;

import org.junit.Test;

public class ExampleTest {

    @Test
    public void testMethod() {
        // 모의 객체 생성
        Example example = mock(Example.class);
        
        // 특정 조건에 따른 동작 정의
        when(example.method(anyInt())).thenAnswer(invocation -> {
            int argument = invocation.getArgument(0);
            
            if (argument > 10) {
                return "조건 충족";
            } else {
                throw new IllegalArgumentException("조건 불충족");
            }
        });
        
        // 메소드 호출 및 결과 검증
        String result = example.method(15);
        assertEquals("조건 충족", result);
        
        // 다른 조건에 대한 실행 흐름 검증
        assertThrows(IllegalArgumentException.class, () -> example.method(5));
    }
}

위의 예제 코드에서는 Example 클래스의 method 메소드를 테스트하고 있습니다. Example 클래스는 특정 조건에 따라 다른 동작을 수행하는 것을 가정하고 있습니다.

mock(Example.class)를 사용하여 Example 클래스의 모의 객체를 생성합니다. 그리고 when(example.method(anyInt()))을 사용하여 method 메소드가 호출될 때의 동작을 정의합니다. 이 예제에서는 method 메소드의 인자가 10보다 클 경우 “조건 충족”을 반환하고, 10보다 작거나 같을 경우 IllegalArgumentException을 던지도록 정의되어 있습니다.

assertEquals("조건 충족", result)를 사용하여 method 메소드의 결과가 “조건 충족”인지 검증합니다. 또한 assertThrows(IllegalArgumentException.class, () -> example.method(5))를 사용하여 method 메소드가 10보다 작은 인자로 호출될 때 IllegalArgumentException이 발생하는지 검증합니다.

이와 같이 Mockito를 사용하면 특정 조건에 따라 다른 동작을 하는 메소드를 테스트할 수 있습니다.