[java] Mockito를 사용하여 람다 표현식을 가진 메소드를 테스트하는 방법은?

모키토(Mockito)는 자바에서 유닛 테스트를 작성할 때 사용하는 목(Mock) 프레임워크입니다. 람다 표현식을 가진 메소드를 테스트하기 위해서는 모키토의 doAnswer 메소드를 사용할 수 있습니다.

다음은 모키토를 사용하여 람다 표현식을 가진 메소드를 테스트하는 예제 코드입니다.

import org.junit.Test;
import org.mockito.ArgumentCaptor;

import java.util.function.Consumer;

import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;

public class LambdaMethodTest {

    @Test
    public void testLambdaMethod() {
        // 모키토로 모의 객체 생성
        MyService myService = mock(MyService.class);

        // 람다 표현식을 가진 메소드 호출
        myService.doSomethingWithLambda(a -> {
            // 람다 표현식이 실행되면서 수행할 동작 정의
            System.out.println("Lambda expression received: " + a);
        });

        // 람다 표현식이 올바르게 실행되는지 검증하기 위해 모키토의 doAnswer 메소드를 사용
        ArgumentCaptor<Consumer<String>> captor = ArgumentCaptor.forClass(Consumer.class);
        doAnswer(invocation -> {
            Consumer<String> lambda = captor.getValue();
            lambda.accept("Test Argument");
            return null;
        }).when(myService).doSomethingWithLambda(captor.capture());

        // 람다 표현식이 올바르게 실행되는지 검증
        myService.doSomethingWithLambda(s -> {
            assert s.equals("Test Argument");
        });
    }
}

class MyService {
    public void doSomethingWithLambda(Consumer<String> lambda) {
        // 람다 표현식 실행
        lambda.accept("Argument");
    }
}

위의 코드에서는 MyService 클래스의 doSomethingWithLambda 메소드를 테스트하는 예제입니다. 모키토를 사용하여 MyService의 모의 객체를 생성한 후, doSomethingWithLambda 메소드를 호출합니다.

람다 표현식을 보내면서 메소드가 실행될 때, 이를 검증하기 위해 모키토의 doAnswer 메소드를 사용합니다. doAnswer 메소드는 메소드 호출 시 특정 동작을 수행하는 람다 표현식을 정의할 수 있습니다. 이를 통해 람다 표현식이 올바르게 실행되는지 테스트할 수 있습니다.

위의 코드에서는 람다 표현식이 실행될 때 System.out.println 메소드를 호출합니다. 이를 통해 람다 표현식이 올바르게 실행되는지 확인할 수 있습니다.


참고자료: