일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 알고리즘
- 파이썬
- CJ UNIT
- 소프티어
- 문제풀이
- 자바
- 프로그래머스
- 코틀린
- softeer
- C++
- kotlin
- BFS
- 스프링
- 백준
- SQL
- 시나공
- 1과목
- 회고
- 코딩봉사
- SW봉사
- 데이터베이스
- 공부일지
- programmers
- 정보처리산업기사
- java
- 백준 알고리즘
- 백준알고리즘
- python
- MYSQL
- 코딩교육봉사
Archives
- Today
- Total
JIE0025
통합테스트에서 데이터베이스 이슈 : 각각은 잘 동작하지만 전체 동작시 실패 본문
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
.