기본 패턴
java
@ParameterizedTest
@ValueSource(ints = {0, 1, 2, 10})
void isNonNegative_returnsTrue(int value) {
assertTrue(value >= 0);
}설명
- 기본 테스트가 "하나의 입력으로 하나의 결과를 검증"한다면, parameterized test는 같은 검증 구조를 여러 입력에 반복 적용하는 방법입니다. 입력 표가 있는 규칙 검증에 특히 잘 맞습니다.
@ValueSource,@CsvSource,@MethodSource는 입력을 어디서 가져올지 정하는 대표적인 방법입니다. 어떤 source를 고를지는 테스트 데이터의 복잡도에 따라 달라집니다.- lifecycle도 함께 중요합니다.
@BeforeEach,@AfterEach,@BeforeAll,@AfterAll은 테스트마다 준비할 것과 전체 묶음에 한 번만 준비할 것을 분리합니다. 이 구분이 없으면 테스트가 무겁고 느려지기 쉽습니다. - 핵심은 "같은 규칙을 여러 사례로 확인하되, 준비 비용은 과하게 키우지 않는다"는 균형입니다. parameterized test가 반복문처럼 보일 수 있지만, 의도는 데이터 중심 테스트 설계에 더 가깝습니다.
- 입문 이후에는 테스트 수보다 구조가 중요해집니다. parameterized test와 lifecycle을 이해하면, 비슷한 테스트를 복붙하지 않고도 더 강한 검증을 만들 수 있습니다.
빠른 정리
| 요소 | 역할 |
|---|---|
@ParameterizedTest | 같은 테스트를 여러 입력으로 실행 |
@ValueSource | 단순 값 목록 입력 |
@CsvSource | 여러 컬럼 입력 |
@MethodSource | 복잡한 테스트 데이터 공급 |
@BeforeEach / @BeforeAll | 준비 단계 분리 |
주의할 점
parameterized test가 편하다고 해서 모든 케이스를 한 메서드에 몰아넣으면 오히려 실패 원인이 흐려질 수 있습니다. 입력 구조가 크게 다르면 테스트도 나누는 편이 더 읽기 쉽습니다.
참고 링크
2 sources