Repository navigation
test: 통합 테스트를 공용 컨테이너로 통일하고 PR 테스트 CI 추가 - #141
Conversation
- 예약 테스트 기반 클래스가 @container로 클래스마다 컨테이너를 내렸다 올려, 재사용된 Spring 컨텍스트가 내려간 DB에 접속하면서 예약 테스트 29건이 실패하던 문제를 고친다. - 각자 컨테이너를 띄우던 테스트 8개도 IntegrationTestSupport를 상속하게 한다. - 모든 통합 테스트가 같은 DB를 쓰므로, 테스트마다 기준 데이터(track, position, dues_exemption_reason)를 뺀 전 테이블을 TRUNCATE해 실행 순서와 무관하게 만든다. - main/develop 대상 PR에서 ./gradlew test를 돌리는 CI 워크플로를 추가한다.
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 45 minutes. View limit details
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
컨텍스트마다 커넥션 풀을 잡아, 테스트 컨텍스트가 늘면 기본 상한(100)을 넘어 'too many clients already'로 컨텍스트 로딩이 실패한다.
요약
리팩토링을 시작하기 전에 테스트를 믿을 수 있게 만드는 PR이다. 프로덕션 코드는 바꾸지 않는다.
ReservationIntegrationTestSupport가@Testcontainers/@Container를 써서 테스트 클래스가 끝날 때마다 Postgres 컨테이너를 내렸다. Spring은 같은 설정의 컨텍스트를 다음 클래스에서 재사용하므로, 두 번째 예약 테스트 클래스부터 내려간 컨테이너 포트로 접속하다Connection refused로 실패했다(전체 실행 시 예약 테스트 6개 클래스 29건 실패).IntegrationTestSupport(싱글턴 컨테이너)를 상속한다. 테스트 코드 약 180줄 감소.memberRepository.deleteAll()을 FK로 막았다.IntegrationTestSupport가 테스트마다 기준 데이터(track,position,dues_exemption_reason)와 Flyway 이력을 뺀 전 테이블을TRUNCATE ... CASCADE한다. ID 시퀀스는 리셋하지 않는다 — 메모리 요청 제한기가 회원 ID를 키로 써서, 리셋하면 테스트 간 429가 난다.main/develop대상 PR에서./gradlew test를 돌린다. 실패 시 테스트 리포트를 아티팩트로 올린다. 배포 워크플로(deploy.yml)는 건드리지 않았다.테스트
./gradlew test: 532건 중 531 통과, 1 스킵(실제 신한 xlsx가 필요한 인수 테스트). 수정 전에는 29건 실패.Summary by CodeRabbit
mainordevelop. Failed runs retain test reports for seven days.