Review 도메인 추가
도메인 로직을 담을 Review 도메인은 가능한 순수 도메인 로직만으로 구현할 수 있게 했다.
즉, 외부 의존성을 최소화 하고 외부 의존성 관련 로직은 해당 클래스에서 사용하지 않도록 하였다.
왜 외부 의존성을 최소화 하는 것 일까?
이는 테스트와 연관되어있다.
export default class Review {
async update(review: Review, newReviewData: IReviewUpdateData) { review._accessibilityRating = newReviewData.accessibilityRating; review._facilityRating = newReviewData.facilityRating; review._cleanlinessRating = newReviewData.cleanlinessRating; review._visitTime = newReviewData.visitTime ?? review._visitTime; review._description = newReviewData.description ?? review._description;
await this.prismaService.review.update({
where: { id:oldReview.id },
data: review.data
});
} }
리뷰가 수정되면 변경된 데이터를 DB에 업데이트 하는 간단한 메서드다.
리뷰가 수정 의도한 대로 수정 되었는지 테스트 하기 위해서는 항상 **DB**가 필요하다.
간단한 Update 기능이지만, 데이터베이스가 필요하게 되면 테스트시 고려할 부분이 많아진다.
- 테스트를 위한 Seed 세팅
- 리뷰가 생성되기 전, 유저, 카테고리, 가게 카테고리, 가게, 리뷰 정보가 추가 되어 있어야 한다.
- 테스트가 끝나면, 다른 테스트에 영향이 가지 않도록 초기화 되어야 한다.
- DB를 사용하기 때문에 케이스가 추가 될 수록 테스트 시간은 길어지게 된다.
데이터베이스 뿐 아니라 다른 외부 의존성(ex) S3, Mailing 등…)이 추가 될 수록 고려할 부분이 많아지면서 간단한 기능이라도, 테스트가 어려워지게 된다.
또한 메서드의 마지막이 DB를 사용한 수정이다 보니 정상적으로 작동했는지 검증 하기 위해선 DB를 통해 확인해야 한다.
만약 Prisma를 다른 Orm으로 변경한다면? RDBMS를 NoSql로 변경한다면? S3 통신이 원활하게 이루어 지지 않았다면? 외부 환경에 의존하여 작성한 테스트 코드는 동일한 결과를 반환하지 못하고 상황에 따라 의도치 않은 결과를 발생돼 테스트가 실패하게 될 것이다.