tearDown 순서
113
96 câu hỏi đã được viết
안녕하세요 강의 중반에
OrderServiceTest 할 때 작성하셨떤
tearDown() 에서
@AfterEach
void tearDown() {
orderProductRepository.deleteAllInBatch();
productRepository.deleteAllInBatch();
orderRepository.deleteAllInBatch();
}
위의 순서를 지키지 않으면 왜 테스트가 깨지나요?
어차피 매번 수행한 후에 데이터를 다 지우는 것은 동일하잖아요.
fk 때문에 지워지지 않는 이유에서 그런건가요.
Câu trả lời 2
0
안녕하세요, highjune 님!
네, 맞습니다. FK 제약조건이 걸려있는 상태기 때문에 순서를 고려하여 지워야 합니다.
감사합니다. 🙂
0
안녕하세요, 인프런 AI 인턴입니다. highjune님.
OrderServiceTest의 tearDown() 메서드에서의 실행 순서가 중요해지는 이유는 바로 데이터베이스의 제약 조건, 특히 외래 키(Foreign Key) 제약 때문입니다.
외래 키 제약의 중요성
테스트 환경에서 FK 제약 조건을 고려하지 않으면, 데이터 삭제 시 제약 조건 위반으로 인해 오류가 발생할 수 있습니다. 예를 들어, orderProductRepository는 orderRepository와 productRepository의 각각의 엔티티를 참조하는 연결 테이블로 작동할 가능성이 큽니다. 이러한 연결 테이블이 먼저 지워지지 않으면, 이후에 참조하는 엔티티들(Order나 Product)를 삭제하려 할 때 외래 키 제약에 의해 삭제가 실패하게 됩니다.
올바른 삭제 순서
- 연결 테이블(
orderProductRepository)의 데이터를 먼저 삭제합니다. 이렇게 하면 연결된Order와Product데이터에 대한 참조가 모두 해제됩니다.
- 참조되는 테이블(
productRepository와orderRepository)의 데이터를 삭제합니다. 이제 이 테이블들에 남아 있는 참조 관계가 없으므로 안전하게 데이터 삭제가 가능합니다.
이 과정을 통해 각 엔티티 간의 외래 키 제약 조건을 충족시키면서 모든 데이터를 안전하게 삭제할 수 있습니다. 따라서, 올바른 순서를 지키는 것이 매우 중요합니다.
관련 질문과 답변으로 추가적인 이해를 도울 수 있는 링크를 참조하시기 바랍니다:
- @AfterEach에서 tearDown 할 경우
- @SQLRestriction으로 논리적 삭제 필드에 대한 tearDown에 대해 궁금합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
private 상수 테스트 관련 질문
0
81
1
void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??
0
123
2
커버리지는 어떻게 활용하시는지 궁금합니다.
0
158
2
테스트 문서화 질문입니다
0
104
2
단위테스트 질문이 있습니다
0
93
2
컨트롤러는 모킹을 한 이유가 궁금합니다.
0
100
2
ERD 가장자리에 있는 도메인 테스트 질문
0
86
2
DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?
0
131
2
OrderCreateRequest DTO에 대해서 궁금한점
0
101
2
고전파의 테스트 대역 사용 대상, 공유 의존성
0
153
2
계층 관련 질문이 있습니다.
0
137
3
'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다
1
121
2
혹시 update 로직은 어떻게 테스트하나요? (@Setter?)
0
133
2
단위테스트와 통합테스트의 경계가 궁금합니다.
0
224
2
Service+Repository 통합테스트 관련 질문입니다.
0
149
2
OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요
0
183
2
test 용 .yml
0
89
2
throws Exception
0
78
2
카페키오스크 클래스 문의 ,,
0
87
2
Rest docs 문서용 테스트코드를 따로 작성해야 되나요?
0
171
2
테스트 코드에서 필요한 생성자
0
135
1
@Builder 생성자 private
0
132
2
@DisplayName gradle / intellJ
0
90
2
36:40 초 부근에 tearDown 없어도 통과하는 이유가 궁금해요
0
178
2

