RED - GREEN - Refactor
로 순서를 요약할 수 있다.
RED
- 실패하는 테스트의 작성
- 추가하고자 하는 새로운 기능 혹은 개선사항을 반영해야한다.
- 아직 구현되지 않은 코드의 동작을 지정하는 테스트 케이스
기능 명세
를 테스트 코드로 먼저 작성하는 것을 말합니다.
- 단순한 더하기 계산기를 만들어보자
import static org.junit.Assert.*; import org.junit.Test; public class CalculatorTest { @Test public void testAddition() { Calculator calculator = new Calculator(); int result = calculator.add(2, 3); assertEquals(5, result); } }
- 해당 테스트는 아직 구현부가 없기에 무조건적으로 실패한다.
- 구현하기전에 미리 필요한 최소한의 클래스와 메서드를 임의로 작성해놓는 등
- 껍데기만 만들어 놓는 것이다.
GREEN
- 테스트를 통과시키기 위한 최소한의 코드의 작성
신속하게 테스트를 통과
하는 것이 궁극적인 목표다
- 코드의 최적화는 신경 쓰지 않아야 한다.
- 더하기 계산기의 구현
public class Calculator { public int add(int number1, int number2) { return number1 + number2; } }
- 위 코드는 너무 간단해서 사실 구현은 이걸로 끝이 되지만
- 실제 비즈니스 로직을 반영할 시, 비즈니스 로직의 최적화를 고려하지 않고, 테스트를 통과하기 위한 코드가 되어도 상관없다
Refactor
- 테스트 통과 이후에 코드를 리팩터링한다.
- 코드의 중복
- 유지보수성의 고려
등의 작업을 포함할 수 있다.
- 기능을 변경하지 않고 내부 구조를 개선할 수 있다.
- 테스트 통과 이후에 코드를 리팩터링한다.
오해할 수 있는 사항 정리
RED
단계에서 모든 테스트코드를 정의해놓고 시작해야하나?- TDD 의 핵심은 작은 단계 로서 개발을 진행하는 것이다.
- 한 번에 하나의 기능 또는 개선 사항에 대해 하나의 테스트를 작성하고 개발을 진행하는 것이다.
- 예를 들어 주문 기능의 경우
- 단순히 주문이 성공해야하는 테스트 케이스를 작성후
- 구현
- 리팩터
- 주문이 실패해야하는 테스트 케이스 작성 후
- 실패시 성공하도록 수정
- 리팩터
- 의 과정을 거치면서 코드를 단단하고 견고하게, 또는 개발자의
자신감
을 부여해주는 역할을 하는 것이다.
GREEN
단계에서는 어느 정도까지 코드를 짜야하는건가?- 핵심은 빠른 피드백과 빠른 기능을 구현이다.
- 시스템에 필요한 것만 구현하고, 미래에 필요하거나 최적화가 필요하다는 등의 행위는 필요하지 않다.
- 예를 들어,
- 주문 기능의 경우 별도 동시성을 고려하는 코딩이 필요하다.
- 하지만 주문 테스트를 작성시 동시성을 고려하지 않는 단순 성공, 실패만을 체크하는 테스크 코드의 경우에는
REFACTOR
나GREEN
에서 고려치 않는 것이다.
Uploaded by N2T
'자바 > 리팩토링' 카테고리의 다른 글
[리팩토링 일기] mybatis는 생산성면에서 너무 구리다. (0) | 2023.11.10 |
---|---|
[리팩토링] 마이바티스에서의 매퍼 테스트 고찰 (0) | 2023.11.10 |
[리팩토링] TDD 로 프로젝트의 전환의 타당성 분석 (0) | 2023.11.06 |
[인텔리제이] 테스트 코드 작성 - 커밋, 푸쉬 시 테스트 코드 수행해 안전한 커밋을 만드는 방법 (0) | 2023.10.26 |
[리팩토링]Junit5 에서의 컨트롤러 테스트시 어노테이션 종류 등 (0) | 2023.10.26 |