22장 복잡한 테스트 데이터 만들기
-
테스트 코드에서 객체를 생성하는 코드
- 테스트 대상이 되는 행위에 기여하지 않는 정보로 테스트를 채워 넣어 테스트를 읽기 어렵게 만듬.
- 생성자 인자나 객체 구조를 변경했을 때 여러 테스트가 깨질 것 = 테스트가 불안정해짐
-
해결 방법
- 객체 모체
- 테스트 데이터 빌더
객체 모체
- 위의 문제를 방지
- 테스트에서 사용할 객체를 생성하는 여러가지 팩터리 메서드가 담긴 클래스
- 새 객체 구조를 만드는 코드를 묶고 거기에 이름을 부여함으로써 테스트의 가독성을 높인다.
- 테스트 사이에서 재사용할 수 있어 유지 보수에 도움이 된다.
- 하지만 테스트 데이터각 변형되면 잘 대처하지 못함 -> 사소한 차이가 있을 때마다 새로운 팩터리 메서드 필요
테스트 데이터 빌더
- 빌더 패턴을 사용하여 테스트에서 필요한 인스턴스 생성
- 중복을 줄이고 테스트 코드를 좀 더 표현력 있게 만듬.
- 팩터리 메서드와 테스트 골격을 조합한 형태로, 단순히 기능을 읶끌러 나가는 단계의 나열이 아니라 좀 더 읽기 쉽고 기능의 의도를 서술하는 선언적인 테스트를 작성하는 데 도움이 된다.
-
테스트 빌더 사용의 이점
- 테스트의 표현력을 유지하고 변화에 탄력적으로 대응
- 객체 생성시 문법적으로 지저분한 부분을 가려줌.
- 기존적인 경우를 단순하게 하고 특별한 경우라도 복잡하게 만들지 않음.
- 테스트 객체의 구조적인 변화로부터 테스트를 다시 한 번 보호
- 읽기 쉽고 오류를 찾기 쉬운 테스트 코드를 작성할 수 있다. -> 각 빌더 메서드가 매개변수의 용도를 밝히기 때문
- 다수의 비슷한 객체를 생성할 때 유용하게 사용됨
- 조합해서 객체 생성할 수 있음.
- 팩터리 메서드를 이용하여 도메인 모델 강조
- 중복 없애기