Test Fixture
한 줄 정의
Test Fixture는 테스트 실행에 필요한 객체, DB 데이터, 외부 응답을 준비하는 데이터와 구성이다.
실무에서 왜 문제 되는가
- fixture가 복잡하면 테스트가 무엇을 검증하는지 보이지 않는다.
- 테스트 간 데이터를 공유하면 실행 순서에 따라 실패할 수 있다.
- 운영 도메인 규칙과 맞지 않는 fixture는 실제로 불가능한 상태를 검증하게 만든다.
- builder가 과도하게 범용화되면 기본값이 숨겨진다.
실무 판단 기준
| 상황 | 선택 |
|---|---|
| 단순 값 객체 | 테스트 안에서 직접 생성 |
| 반복되는 도메인 객체 | Test Data Builder |
| DB 상태 필요 | 테스트별 명시적 setup |
| 복잡한 시나리오 | 의미 있는 factory 메서드 |
자주 나는 실수
- 하나의 거대한 fixture를 여러 테스트가 공유한다.
- 테스트에 필요 없는 필드까지 모두 드러낸다.
- fixture 기본값이 도메인 규칙을 위반한다.
- 실패 원인을 알기 어려운 랜덤 데이터를 사용한다.
확인 방법
- 테스트 이름과 fixture만 보고 조건을 이해할 수 있는지 확인한다.
- 테스트 간 실행 순서를 바꿔도 통과하는지 본다.
- fixture가 실제 도메인 invariant를 만족하는지 확인한다.
핵심 요약
Fixture는 테스트의 전제 조건을 표현한다.
좋은 fixture는 짧고 명확하며 검증하려는 조건만 드러낸다.
공유 fixture는 중복을 줄이지만 테스트 간 결합을 만들 수 있다.
Test Data Builder는 반복 생성을 줄이지만 숨겨진 기본값을 조심해야 한다.
도메인 규칙을 위반하는 fixture는 테스트 신뢰도를 떨어뜨린다.
꼬리 질문
- 테스트 fixture가 복잡하면 어떤 문제가 생기는가?
- Test Data Builder는 언제 유용한가?
- 테스트 데이터 공유는 왜 위험한가?