관리 메뉴

JIE0025

통합테스트에서 데이터베이스 이슈 : 각각은 잘 동작하지만 전체 동작시 실패 본문

백엔드/이슈, 트러블슈팅

통합테스트에서 데이터베이스 이슈 : 각각은 잘 동작하지만 전체 동작시 실패

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/