학습 키워드
- 단위 테스트
- Mock Object (가짜 객체)
- Mockito Framework
- Stubbing
학습 한 내용
왜 Mock(가짜 객체)이 필요한가?
ProductService를 테스트하려고 보니, ProductRepository 등 여러 의존성을 가지고 있다.
- 문제점: 서비스만 테스트하고 싶은데 실제 Repository를 사용하면 DB 연결이 필요해지고, 테스트가 무거워진다. 결국 서비스 하나 테스트하려다 DB까지 끌어다 쓰는 '통합 테스트'가 되어버린다.
- 해결책: 실제 객체와 똑같이 생겼지만, 알맹이는 내가 조종할 수 있는 가짜 객체(Mock)를 주입해서 서비스 로직만 떼어내어 테스트한다.
Mockito: 가짜 객체 제조기
Mockito는 가짜 객체를 쉽게 만들고 관리해 주는 라이브러리다. 즉 외부 의존성을 Mock으로 대체하여 비즈니스 로직을 독립적으로 테스트할 수 있게 해주는 도구이다.
- Mock 생성:
ProductRepository의 가짜 버전을 만든다. - Stubbing: "가짜 Repository는 누군가
findById(100L)를 호출하면 미리 준비한 Product 객체를 줘 라고 미리 교육시킨다. - 테스트 실행:
ProductService에 이 가짜 객체를 주입하고 메서드를 실행한다.
단위 테스트의 분리
- 기존: Controller -> Service -> Repository (모두 연결되어 있어 하나만 테스트하기 어려움)
- Mockito 적용 후: Service <-> MockRepository (Repository를 가짜로 대체하여 Service의 로직만 순수하게 검증 가능)