본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
1) 공부시작
2) 강의장
3) 공부끝
4)

Mock과 Stub
Mock과 Stub은 테스트에서 외부 의존성을 대체하는 객체로, 둘 다 Test Double의 하위 개념입니다. Stub은 미리 정의된 응답을 제공하는 단순한 가짜 객체로, 주로 특정 입력에 대해 고정된 출력을 반환합니다. 예를 들어, 데이터베이스 호출을 Stub으로 대체하면 항상 동일한 데이터를 반환하도록 설정할 수 있습니다. 반면 Mock은 동작과 기대치를 검증하는 데 초점을 둡니다. Mock은 호출 여부, 호출 횟수, 순서 등을 확인하며, 테스트가 의존성의 상호작용을 검증할 때 유용합니다. 예를 들어, 메서드가 특정 API를 정확히 3번 호출했는지 확인할 때 사용됩니다.
Test Double
Test Double은 단위 테스트에서 실제 객체를 대체하는 모든 가짜 객체를 포괄하는 용어입니다. 여기에는 Stub, Mock, Fake, Dummy 등이 포함됩니다. Dummy는 단순히 자리 채우기용(값을 사용하지 않음), Fake는 실제 로직을 간단히 구현한 버전입니다. Test Double을 사용하면 테스트 대상 코드를 격리해 외부 의존성(데이터베이스, 네트워크 등)에 영향을 받지 않게 됩니다. 이는 테스트의 독립성과 재현성을 높이는 핵심 요소입니다.
Mockito
Mockito는 Java에서 널리 사용되는 Mocking 프레임워크로, Mock 객체를 쉽게 생성하고 동작을 정의하며 검증할 수 있게 해줍니다. 예를 들어, when(mockObject.method()).thenReturn(value)로 Stub처럼 응답을 설정하거나, verify(mockObject).method()로 호출 여부를 확인할 수 있습니다. Mockito의 장점은 간결한 문법과 강력한 기능(예: 예외 던지기, 호출 횟수 검증)으로, 복잡한 의존성을 가진 코드를 테스트할 때 특히 유용합니다.
Mock을 사용해 단위 테스트를 작성해야 하는 이유
Mock을 사용하면 단위 테스트의 초점을 테스트 대상 코드에만 맞출 수 있습니다. 외부 시스템(예: API, DB)이 느리거나 불안정해도 테스트가 실패하지 않으며, 격리된 환경에서 빠르고 안정적으로 실행됩니다. 또한, Mock은 특정 시나리오(예: 에러 응답)를 쉽게 시뮬레이션해 코드의 예외 처리를 검증할 수 있습니다. 예를 들어, 결제 시스템을 테스트할 때 외부 결제 API를 Mock으로 대체하면 실제 결제 없이 동작을 확인할 수 있습니다. 이는 테스트 속도를 높이고, 비용을 줄이며, 코드 품질을 보장하는 데 필수적입니다. 단, Mock을 과용하면 테스트가 실제 동작과 괴리될 수 있으니, 통합 테스트와 균형을 맞춰야 합니다.