TDD란?

TDD(Test Driven Development)는 테스트 주도 개발로, 소프트웨어를 개발하는 여러 방법론 중 하나이다.

제품이 오류 없이 정상 작동하는지 확인하기 위해 모든 코드는 프로그래머가 작성하고 나서 테스트를 거치게 된다.

TDD에서는 제품의 기능 구현을 위한 코드와 별개로, 해당 기능이 정상적으로 움직이는지 검증하기 위한 테스트 코드를 작성한다.

TDD 효과

  1. 코드 안정성 UP
    1. 짧은 주기의 테스트 코드를 개발, 리팩토링 단계를 거치기에 코드의 안정성을 높일 수 있다.
  2. 재설계 시간의 단축
    1. TDD는 설계 단계에서 테스트 시나리오를 작성하기 때문에 무엇을 해야 하는지 정의하고 생각할 수 있어 완성도 높은 설계가 된다.
  3. 디버깅 시간의 단축
    1. 자동화된 단위 테스트를 통해 특정 버그를 찾을 수 있다.

단점으로는 한 번 개발한 코드를 2번 이상 반복하게 되어 생산성의 저하가 있다.

TDD 예시

@SpringBootTest
@Transactional // 각각의 테스트 메서드에 대해 트랜잭션을 시작하고, 테스트가 종료되면 롤백
class TagServiceTest {

    @Autowired
    private TestService testService;

    @BeforeEach
    public void before(){
        System.out.println("Test Before");
    }

    @AfterEach
    public void after(){
        System.out.println("Test After");
    }

    @Test
    @DisplayName("두 수가 일치해야 성공")
    public void test() throws Exception {
        // Given
        int number = 0;
        System.out.println("Given");

        // When
        int generateNumber = testService.generate();
        System.out.println("When");

        // Then
        assertThat(generateNumber).isEqualTo(number);
        System.out.println("Then");
    }

    @Test
    @DisplayName("두 수가 일치하지 않아야 성공")
    public void test2() throws Exception {
        // Given
        int number = 0;
        System.out.println("Given");

        // When
        int generateNumber = testService.generate();
        System.out.println("When");

        // Then
        assertThat(generateNumber).isNotEqualTo(number);
        System.out.println("Then");
    }

}