inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Practical Testing: Hướng dẫn kiểm thử thực tế

Kiểm thử Business Layer (2)

tearDown 순서

113

highjune

96 câu hỏi đã được viết

0

안녕하세요 강의 중반에

OrderServiceTest 할 때 작성하셨떤

 

 

tearDown() 에서

 

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

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

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

 

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

spring tdd jpa mockito 소프트웨어-테스트 junit5

Câu trả lời 2

0

wbluke

안녕하세요, highjune 님!

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

감사합니다. 🙂

0

highjune

감사합니다!

0

communityai8509

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

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

외래 키 제약의 중요성

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

올바른 삭제 순서

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

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

관련 질문과 답변으로 추가적인 이해를 도울 수 있는 링크를 참조하시기 바랍니다:
- @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