728x90
반응형
⚙️ TDD(Test-Driven Development)
자동테스트, red•green•blue 단계
📌 TDD란?
테스트 주도 개발이라고도 하며, 자동 테스트를 활용해 개발을 이끌어가는 방식
일반적으로 기능을 먼저 만들고 테스트를 작성하는 흐름과 달리, TDD는 테스트 코드를 먼저 작성하는 것이 핵심 ⭐️
📌 기존 방식 vs TDD
👤 기존 방식
- 사람이 직접 테스트 (수동 테스트)
- 등록, 수정, 목록, 삭제, 종료 등 기능을 하나씩 눌러 확인
- 시간이 오래 걸리고, 놓치는 케이스 발생 가능
🤖 TDD 방식
- 자동 테스트로 반복 검증
- 테스트 실행도, 결과 확인도 모두 기계가 처리
- JUnit 같은 테스트 프레임워크 사용
- 테스트 케이스를 만들지 않으면 개발을 진행할 수 없음 → 테스트 강제
⚙️ TDD 개발 사이클 (Red → Green → Blue)
TDD는 보통 Red → Green → Blue 3단계로 반복
| 단계 | 설명 |
| 🔴 Red | 실패하는 테스트 작성 ➡️ 기능이 없으니 당연히 실패 |
| 🟢 Green | 테스트를 통과시키기 위한 최소한의 구현 |
| 🔵 Blue | 리팩토링 및 테스트 케이스 보완 |
⭐️ 핵심
기능보다 테스트가 먼저 작성된다.
즉, 테스트 코드가 없으면 기능 구현도 시작할 수 없다.
📌 TDD의 장점
'TDD == 자동 테스트' 라고 할 순 없지만 TDD에 자동 테스트가 포함이므로 장점이 겹침
- 속도: 테스트 실행이 빠름
- 편의성: 버튼 한 번으로 수백 개 케이스 실행 가능
- 정확성: 오류 발생 위치를 정확히 파악
- 재사용성: 코드 수정 후에도 기존 테스트로 회귀 검증 가능
📌 JUnit과 Assert
자동 테스트의 핵심은 검증이다.
Java 기본 assert 키워드도 있지만 기능 제약이 많으므로, assertThat (AssertJ 라이브러리)을 사용
import static org.assertj.core.api.Assertions.assertThat;
@Test
void addTest() {
int result = Calculator.add(1, 2);
assertThat(result).isEqualTo(3); // 기대 값: 3
}
✅ 의존성 추가 필수 (gradle 파일)
📌 간단한 예시
🔴 Red 단계 (테스트만 작성)
@Test
void addTest() {
assertThat(Calculator.add(1, 2)).isEqualTo(3);
}
➡️ 기능이 없으므로 테스트 실패
🟢 Green 단계 (심플한 기능 구현)
class Calculator {
static int add(int a, int b) {
return 3; // 테스트 통과만을 위한 임시 구현
}
}
➡️ 테스트 성공
🔵 Blue 단계 (리팩토링)
class Calculator {
static int add(int a, int b) {
return a + b; // 실제 구현
}
}
➡️ 코드 개선 + 필요 시 테스트 케이스 추가
TDD는 처음에는 "왜 기능보다 테스트를 먼저 쓰지?" 라는 의문이 들 수 있지만,
시간이 지날수록 유지보수, 기능 확장, 버그 방지에서 강력한 효과를 발휘한다.
그러므로 꾸준히 공부하고 실습하며 익히도록 하자 🙌🏻
728x90
반응형
