38장. Testcontainers와 계약 테스트를 층별로 쓴다
domain unit test는 fake clock/repository로 빠르게 규칙을 확인한다. DB integration은 검증한 PostgreSQL image와 실제 migration, queue integration은 실제 Redis/broker 특성을 사용한다. E2E는 Nest application의 pipe·guard·filter·controller·transaction을 통과한다. in-memory fake만으로 출시하지 않는다.
container tag, architecture, seed, timezone을 고정한다. test마다 독립 tenant와 idempotency key를 사용한다. background publisher가 test transaction 밖에서 움직인다는 점을 고려해 명시적 완료 조건을 기다리고 setTimeout으로 운을 시험하지 않는다. 실패 시 app/container log와 migration version을 artifact로 남긴다.
consumer contract는 구 event fixture와 신 producer output을 함께 검증한다. WebSocket contract는 reconnect cursor, duplicate, unauthorized room을 포함한다. flaky test는 재시도 횟수로 덮지 않고 race와 resource leak을 추적한다.