개발/이슈, 트러블슈팅
통합테스트에서 데이터베이스 이슈 : 각각은 잘 동작하지만 전체 동작시 실패
Kangjieun11
2023. 1. 7. 04:12
728x90
✅ 문제
통합테스트코드를 두개 작성했다.
각각의 테스트는 정상적으로 동작하지만, 클래스 단위로 동작시 자꾸 테스트가 실패했다.
✅ 원인 분석
통합테스트는 데이터베이스까지 반영이 되는것을 확인하면서 진행하는 테스트이기 때문에
테스트가 넘어가게되면 따로 데이터베이스를 처리해주지 않는한, 이전 테스트에서 저장한 데이터가 남아있나보다.
이 경우 @BeforeEach 혹은 @AfterEach에서 데이터베이스를 비워주는 작업이 필요해보인다!
✅ 수리
💻 Stack Overflow의 추천
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
https://stackoverflow.com/questions/34617152/how-to-re-create-database-before-each-test-in-spring
테이블에서 모든 값을 삭제하는 것이 아니라
데이터베이스를 삭제하고 다시 생성하기 때문에
중복 키 위반이 발생하지 않습니다.
따라서 모든 테스트는 완전히 새로운 데이터베이스로 실행됩니다.
이렇게 하면 테스트가 다른 테스트에 영향을 미치지 않습니다.
⏺ 그러나...
@DirtiesContext를 사용하는 경우
테스트 사이에 bean 등 모든 것을 다시 로드해야 하므로 빌드 속도가 크게 느려진다고 한다.
https://objectpartners.com/2021/07/14/resetting-database-between-spring-integration-tests/
일단 일차적인 해결을 했으니 남은 테스트코드를 추가하러 가야겠다.
✅ 22.01.09 빌드 속도 개선 후 작성한 글 ⬇️
https://jie0025.tistory.com/391
.