Inflearn brand logo image

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

highjune님의 프로필 이미지
highjune

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

Business Layer 테스트 (2)

tearDown 순서

작성

·

65

0

안녕하세요 강의 중반에

OrderServiceTest 할 때 작성하셨떤

 

 

tearDown() 에서

 

@AfterEach
void tearDown() {
    orderProductRepository.deleteAllInBatch();
    productRepository.deleteAllInBatch();
    orderRepository.deleteAllInBatch();
}

위의 순서를 지키지 않으면 왜 테스트가 깨지나요?

어차피 매번 수행한 후에 데이터를 다 지우는 것은 동일하잖아요.

 

fk 때문에 지워지지 않는 이유에서 그런건가요.

답변 2

0

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, highjune 님!

네, 맞습니다. FK 제약조건이 걸려있는 상태기 때문에 순서를 고려하여 지워야 합니다.

감사합니다. 🙂

highjune님의 프로필 이미지
highjune
질문자

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. highjune님.

OrderServiceTest의 tearDown() 메서드에서의 실행 순서가 중요해지는 이유는 바로 데이터베이스의 제약 조건, 특히 외래 키(Foreign Key) 제약 때문입니다.

외래 키 제약의 중요성

테스트 환경에서 FK 제약 조건을 고려하지 않으면, 데이터 삭제 시 제약 조건 위반으로 인해 오류가 발생할 수 있습니다. 예를 들어, orderProductRepositoryorderRepositoryproductRepository의 각각의 엔티티를 참조하는 연결 테이블로 작동할 가능성이 큽니다. 이러한 연결 테이블이 먼저 지워지지 않으면, 이후에 참조하는 엔티티들(OrderProduct)를 삭제하려 할 때 외래 키 제약에 의해 삭제가 실패하게 됩니다.

올바른 삭제 순서

  1. 연결 테이블(orderProductRepository)의 데이터를 먼저 삭제합니다. 이렇게 하면 연결된 OrderProduct 데이터에 대한 참조가 모두 해제됩니다.
  2. 참조되는 테이블(productRepositoryorderRepository)의 데이터를 삭제합니다. 이제 이 테이블들에 남아 있는 참조 관계가 없으므로 안전하게 데이터 삭제가 가능합니다.

이 과정을 통해 각 엔티티 간의 외래 키 제약 조건을 충족시키면서 모든 데이터를 안전하게 삭제할 수 있습니다. 따라서, 올바른 순서를 지키는 것이 매우 중요합니다.

관련 질문과 답변으로 추가적인 이해를 도울 수 있는 링크를 참조하시기 바랍니다:
- @AfterEach에서 tearDown 할 경우
- @SQLRestriction으로 논리적 삭제 필드에 대한 tearDown에 대해 궁금합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

highjune님의 프로필 이미지
highjune

작성한 질문수

질문하기