강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

고지훈님의 프로필 이미지
고지훈

작성한 질문수

제미니의 개발실무 - 커머스 백엔드 기본편

코드 느끼기

서비스의 테스트에 관하여...

해결된 질문

작성

·

69

2

안녕하세요!

리뷰 쪽 강의를 듣다가 궁금한 점이 있어 질문드립니다.

강의에서는 findReviews를 제외하고 나머지 기능은 Implement Layer를 통해 각각 값을 전달하는 구조로 되어 있는 것 같습니다.

저도 코드 응집도를 높이기 위해 비슷한 구조를 사용 할때가 있는데 실제로는 ReviewService가 여러 작은 서비스에 위임하는 퍼사드 역할을 하게 되는 경우가 있습니다.

이런 퍼사드 서비스는 테스트를 어떻게 하는 것이 좋을지 고민입니다.

제가 생각하기에는,

1. 통합 테스트를 통해 전체 흐름을 검증하거나

2. 각 작은 서비스들을 목(Mock) 혹은 페이크로 대체하여 호출만 검증

하는 방법이 가능할 것 같은데 어느 방법이 더 적합한지 확신이 없어 질문드립니다.

답변 1

2

제미니님의 프로필 이미지
제미니
지식공유자

안녕하세요 지훈님 질문 감사드립니다!
강의에 테스트 관련한 부분이 쫙 빠져있는데 테스트를 고민하신다니 아주 멋지시네요

저는 이 문제는 둘다 필요하다 가 정답이라고 생각합니다 🙂

다만, 그 전에 어떻게 테스트를 할 것인가 보다 먼저 테스트를 통해 뭘 검증하고 싶은가? 가 정의가 되어야한다고 봅니다

  • 만약 각 하위 도구들이 이미 통합 테스트가 탄탄히 되어있는 상태라서, 흐름을 검증하고 싶다면

    • 하위 도구들을 테스트 더블로 정의하고 ReviewService 는 흐름만 검증해도 된다고 봅니다

       

  • 그런데 각각 도구는 잘 동작할 것 같은데, ReviewService 가 위임할때 실제 데이터를 전달하고 전달하는 과정에 대해서 처리가 잘 되는지 상황이 불안해서 검증이 필요하다 느낄 수 있겠죠!

    • 이런 필요성이 느껴진다면 자연스럽게 ReviewService 의 통합테스트가 생성 될 것 같습니다

    • 이 과정에서 테스트 더블로만 동작하는 부분에서 누락되는 버그를 잡을 수도 있겠죠!

      • ex) 런타임 쿼리 실행 에러 라던가, 타입 캐스팅 버그라던가, 매핑 버그라던가 등등..

    • 또 도구별로 통합 테스트는 완벽했는데, 도구끼리 연결하니 버그가 난다던가요!

위의 관점으로 결국 검증해야하는 것을 먼저 정의하고 그에 따른 테스트를 꼼꼼히 만들어가는게 좋다고 생각합니다 🙂

(결국 하위 도구들 테스트가 정말 탄탄하고 촘촘하고 어떤 데이터를 input 받아도 버그가 없을 자신있다면 상위는 테스트 더블로 호출만 체크 할 수 있을것 같습니다)

또 기능별로 테스트의 규모가 차등 될 수도 있을 것 같습니다, 기능적으로 중요도가 덜 해서 검증이 덜해도 덜 불안한 기능들도 있을테니까요 (너무 바쁘다면... 다만 요즘은 AI가 있으니..!)


사실 저는 제가 배포 버튼을 누를때 불안하지 않은 수준을 유지하는게 굉장히 중요해서
그래서 가급적 두 종류 테스트 모두 만드는 편입니다 🤭

모쪼록 도움이 되셨길 바라며, 추가 질문이 있으시면 편히 주세요!
완강까지 힘내주시고 완강 후 수강평도 기대하겠습니다!

고지훈님의 프로필 이미지
고지훈
질문자

빠른 답변 감사합니다!

제가 어느 하나를 선택해야하는 이분법적 생각에 조금 몰려 있었던것 같네요 너무감사합니다 ㅎㅎ 현재로써는 추가적인 질문은 없습니다 해당 답변으로 인해 조금더 궁금하던 부분들도 어느정도 채워진 것 같습니다. 감사합니다~!

고지훈님의 프로필 이미지
고지훈

작성한 질문수

질문하기