2번 글에서 도메인 로직은 외부 의존성을 제거하여 테스트하기 쉬운 코드가 되었다. 그러나 서비스 코드는 외부 의존성을 포함하고 있기 때문에 테스트하기 어려운 코드라고 할 수 있다.
UpdateReview의 테스트 코드를 작성하면서 외부 의존성을 해결하는 방법과 변화에 대응 가능한 테스트 코드를 작성해보겠다.
해당 테스트는 Unit 테스트 환경에서의 얘기다. E2E와 통합 테스트와는 다르니 주의하자.
외부 의존성 Mock vs Stub
현재 우리 코드에서 S3관련 책임은 AwsS3Service가 지고 있다. 즉, 이미지를 업로드 성공여부 보장은 AwsS3Service에서 이루어져야 한다. AwsS3Service와 같은 외부 API에 대한 책임을 지는 코드의 테스트가 잘 작성되어 있다면, 외부 API의 작동은 해당 테스트가 보장할 것이다. 그렇기 때문에 서비스 코드에서는 외부 API가 정상적으로 작동한다고 가정하고 테스트를 진행해도 충분하다고 생각한다.
같은 결로 DB의 생성, 조회 등 DB관련 기능은 Repository에서 책임져야한다.
정상적으로 작동한다고 가정한다고 했으니, 어떤 방식으로 구현하는게 좋을까?
Mock 사용
Mock의 특징