@MockBean: 컨텍스트 내 실제 빈을 가짜 객체로 대체
상위 맥락
01. Mock 환경과 인프라 < 01. Controller 단위 테스트 < 02. Spring MVC2 핵심 기술과 설계 < MVC < Spring < Web
핵심 정리
자료에서는 @MockitoBean이라는 표현이 사용되며, 컨트롤러가 의존하는 실제 Service 빈을 가짜 객체로 대체하는 역할로 설명합니다. 이 노트에서는 마인드맵 제목에 맞추어 @MockBean으로 정리합니다.
@MockBean의 목적은 컨트롤러 테스트에서 하위 계층의 영향을 제거하는 것입니다. 컨트롤러는 요청과 응답 처리 흐름을 검증하는 대상이고, 실제 비즈니스 로직이나 데이터베이스 연동은 이 테스트의 관심사가 아닙니다.
동작 방식
테스트 컨텍스트 안에서 실제 Service 빈 대신 Mock 객체를 등록합니다.
이후 when().thenReturn() 방식으로 Mock 객체의 반환값을 미리 정의합니다.
예를 들어 Service의 echo("Hello") 호출 결과를 "echo: Hello"로 정해두면, 컨트롤러 테스트는 Service 내부 구현과 무관하게 항상 같은 결과를 받습니다.
이렇게 하면 테스트가 외부 상태에 흔들리지 않습니다. 데이터베이스 상태, 네트워크 지연, 실제 로직의 복잡성 없이 컨트롤러의 매핑, 바인딩, 응답 구성만 검증할 수 있습니다.
MockMvc와의 역할 분리
- MockMvc는 앞단의 WAS와 Servlet 환경을 가짜로 만듭니다.
- @MockBean은 뒷단의 Service 의존성을 가짜로 만듭니다.
이 둘이 결합되면 컨트롤러는 앞뒤가 모두 통제된 환경에서 테스트됩니다.
한 문장 요약
@MockBean은 컨트롤러가 의존하는 실제 빈을 테스트용 가짜 객체로 바꾸어, 웹 계층만 독립적으로 검증하게 해주는 의존성 격리 장치입니다.
핵심 연결
MockMvc와 함께 읽으면 좋습니다.