테스트 의존성 관리로 높은 품질의 테스트 코드 유지하기
양권성 · 토스 · 토스 기술 블로그
소개
혹시 테스트 코드에서도 의존성을 관리해본 적이 있으실까요? 해당 포스트에서는 Gradle의 java-test-fixtures 플러그인을 사용하여 테스트 의존성 관리를 통해 높은 품질의 테스트 코드를 유지하는 방법을 알아봅니다.
AI 핵심 요약
멀티 모듈 프로젝트에서 테스트용 Builder와 Helper를 공유하려면 코드를 복사하거나 별도 모듈에 모아야 해 중복과 응집도 저하가 생길 수 있습니다. 글은 Gradle의 `java-test-fixtures` 플러그인을 적용해 테스트 전용 클래스를 `testFixtures` 소스셋에 두고, `testImplementation(testFixtures(project(...)))`로 다른 모듈의 테스트에 제공하는 방법을 설명합니다. 또한 H2 같은 테스트 의존성은 `testFixturesRuntimeOnly`에 선언하고, 이를 사용하는 모듈에서 `testRuntimeOnly(testFixtures(project(...)))`로 연결하면 의존성을 해당 모듈에 직접 선언하지 않고도 테스트 런타임에 전달할 수 있습니다. 테스트 코드도 중복과 의존성 결합을 관리해야 하는 소프트웨어이며, Gradle의 구성별 클래스패스와 노출 범위를 이해하는 것이 중요하다는 점을 강조합니다.
- 테스트에서만 필요한 Builder와 Helper는 프로덕션 소스와 분리해 `testFixtures`에 둡니다.
- `testImplementation(testFixtures(project(":domain")))`로 다른 모듈의 테스트에서 fixture 클래스를 사용할 수 있습니다.
- 테스트 fixture가 제공하는 의존성은 `testFixturesRuntimeOnly`처럼 fixture 전용 구성에 선언해야 외부 모듈에 전달할 수 있습니다.
- Gradle 구성별로 의존성이 어느 클래스패스에 들어가고 외부 모듈에 노출되는지 확인하세요.
비슷한 학습 자료
쉼 없이 도는 테스트, 사람이 어디까지 돌봐야 할까요? - 토스닥터(Toss Doctor)
강연신/안재은/한가영 · 토스 기술 블로그
누군가는 토스를 테스트하는 동안, 우리는 테스트하는 법을 만듭니다.
토스 QA 플랫폼 팀 · 토스 기술 블로그
가치있는 테스트를 위한 전략과 구현
조민규 · 토스 기술 블로그
프론트엔드 개발에서 테스트 자동화, 꼭 해야 할까? | EP.3 모닥불
토스 프론트엔드 챕터 · 토스 기술 블로그
ESLint와 AST로 코드 퀄리티 높이기
전성 · 토스 기술 블로그
TestContainers로 유저시나리오와 비슷한 통합테스트 만들어 보기
딜리버리프로덕트 김태훈 · 컬리 기술 블로그