
TDD(Test-Driven Development)는 Red-Green-Refactor라는 세 단계로 구성된 반복적인 사이클을 중심으로 진행됩니다. 이 과정은 개발자가 코드를 점진적으로 개선하며 높은 품질을 유지할 수 있도록 돕습니다.
@Test
void shouldReturnSumOfTwoNumbers() {
Calculator calculator = new Calculator();
int result = calculator.add(2, 3);
assertEquals(5, result); // 실패: add() 메서드가 아직 구현되지 않음
}public class Calculator {
public int add(int a, int b) {
return a + b; // 테스트를 통과하는 최소한의 코드
}
}public class Calculator {
// 추후 더 복잡한 로직을 추가하더라도 유지보수하기 쉽도록 코드 정리
public int add(int a, int b) {
return a + b;
}
}핵심 철학:
"작동하는 코드를 작성하라. 그리고 더 나은 코드를 만들어라."
TDD는 여러 테스트의 기본이 되는 단위 테스트(Unit Test)를 중심으로 진행됩니다. 하지만, 통합 테스트(Integration Test)와 E2E 테스트(End-to-End Test)와도 밀접한 관계가 있습니다.
@Test
void shouldReturnPositiveNumber() {
assertEquals(5, Math.abs(-5));
}@Test
void shouldSaveUserToDatabase() {
User user = new User("test", "test@example.com");
userRepository.save(user);
assertTrue(userRepository.findById(user.getId()).isPresent());
}| 테스트 유형 | TDD에서의 역할 | 주요 특징 |
|---|---|---|
| 단위 테스트(Unit) | TDD의 핵심. 작은 단위 테스트 | 빠른 피드백, 독립적인 실행 가능 |
| 통합 테스트 | 시스템 검증에 사용 | 모듈 간 상호작용 검증, 데이터베이스와의 통합 테스트 |
| E2E 테스트 | 최종 검증 단계에서 사용 | 사용자의 실제 경험 시뮬레이션 |
TDD는 단순히 테스트를 작성하는 것이 아니라, Red-Green-Refactor 사이클을 통해 반복적으로 코드를 개선하고, 단위 테스트를 중심으로 개발 프로세스를 구조화합니다. 통합 테스트와 E2E 테스트는 TDD와 별개의 개념이지만, 최종적으로 TDD가 만들어낸 코드의 안정성을 보증하는 데 중요한 역할을 합니다.