
이번 포스팅에서는 간단한 계산기 프로그램을 TDD 방식으로 구현해보면서 TDD의 예제를 살펴보겠습니다.
TDD의 Red-Green-Refactor 사이클을 활용하여 간단한 계산기 프로그램을 만들어보겠습니다. JUnit과 AssertJ를 사용해 테스트 코드를 작성하고 점진적으로 개선하는 과정을 보볼 수 있습니다.
먼저, 계산기 프로그램의 핵심 기능인 덧셈 기능에 대한 테스트를 작성합니다. 아직 기능이 구현되지 않았으므로 테스트는 실패해야 합니다.
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
class CalculatorTest {
@Test
void shouldReturnSumOfTwoNumbers() {
// Arrange
Calculator calculator = new Calculator();
// Act
int result = calculator.add(2, 3);
// Assert
assertThat(result).isEqualTo(5); // 테스트 실패: add() 메서드가 아직 구현되지 않음
}
}
add() 메서드가 없기 때문에 컴파일 에러 또는 테스트 실패가 발생합니다. 테스트를 통과시키기 위해 필요한 최소한의 코드를 작성합니다.
class Calculator {
public int add(int a, int b) {
return a + b; // 테스트를 통과시키기 위한 최소 구현
}
}
테스트가 통과한 후, 코드를 개선합니다.
현재 코드는 간단하지만, 앞으로 확장성을 고려해 계산기 기능을 체계적으로 정리할 수 있습니다.
class Calculator {
public int add(int a, int b) {
return a + b;
}
// 추가 기능 예시: 곱셈
public int multiply(int a, int b) {
return a * b;
}
}
assertThat(result).isEqualTo(5); // 명확하고 읽기 쉬운 단언문
assertThat(result).isGreaterThan(0);
요약:
테스트는 코드 품질을 유지하는 안전망 역할을 하며, 리팩터링과 기능 추가를 더 자유롭고 자신 있게 할 수 있도록 도와줍니다.
⬇️ 보다 자세한 정보는 아래 포스팅 참고
AssertJ로 테스트 코드를 작성해보자
결론
TDD는 단순히 테스트 작성 방법론을 넘어, “작동하는 코드에서 더 나은 코드로” 가는 과정입니다. 🚀