[java] Mockito를 통한 테스트 더블(Double)의 종류는 무엇이 있는가?

Mockito는 자바 개발자들이 유닛 테스트를 작성할 때 테스트 더블을 생성하는 데 도움을 줄 수 있는 강력한 도구입니다. 테스트 더블은 실제 구현을 대신하기 위해 사용되며, 테스트를 독립적으로 실행하고 원하는 동작을 강제할 수 있게 해줍니다. Mockito는 다양한 종류의 테스트 더블을 지원하며, 여기에는 다음과 같은 종류가 있습니다.

1. Mock

Mock은 가장 일반적인 테스트 더블로, 실제 객체를 대신하여 행동을 추적하고 검증할 수 있습니다. Mockito를 사용하여 Mock 객체를 생성하면 메소드 호출, 반환 값, 예외 등의 동작을 정의할 수 있습니다. Mock 객체는 주로 테스트에 필요한 외부 의존성을 대체하는 데 사용됩니다.

// Mock 객체 생성 예시
MyObject myObject = Mockito.mock(MyObject.class);

2. Spy

Spy는 실제 객체의 일부를 대체하며, 실제 객체의 동작을 일부분 변경하거나 테스트 중에 동작을 관찰하고자 할 때 사용됩니다. Spy 객체는 원본 객체의 일부 메소드를 호출하고, 나머지 메소드는 원본 동작을 유지하면서 추가 동작을 수행할 수 있습니다.

// Spy 객체 생성 예시
MyObject myObject = Mockito.spy(new MyObject());

3. Dummy

Dummy는 실제 실행할 필요가 없는 객체로, 주로 메소드의 매개변수로 전달되는 객체를 대체하기 위해 사용됩니다. 테스트 중에 실제로 사용되지 않는 매개변수를 간단히 대체해야 할 때 Dummy 객체를 사용할 수 있습니다.

4. Stub

Stub은 메소드 호출에 대한 미리 정의된 동작을 반환하는 객체입니다. Stub을 사용하면 특정 메소드 호출에 대해 원하는 값을 반환하거나 예외를 발생시킬 수 있습니다. Stub은 특정 상황에서 정상적인 동작을 모방하고자 할 때 유용합니다.

5. Fake

Fake는 실제로 동작하는 객체지만 가벼운 버전으로 대체된 객체입니다. 일부 동작이 실제 구현과 다르게 구현될 수 있으며, 주로 성능상의 이점이 있는 Fake 객체로 대체하여 빠르고 가볍게 테스트를 실행할 수 있습니다.

위에서 언급한 종류의 테스트 더블을 사용하여 Mockito를 활용하면 좀 더 강력하고 유연한 유닛 테스트를 작성할 수 있습니다. Mockito는 유닛 테스트를 작성하는 개발자들에게 편의성과 가독성을 제공하여 효율적인 테스트를 도와줍니다.

참고: Mockito 공식 문서