TIL - 3월 18일 : TDD

박경서·2024년 3월 19일

- TDD 사이클

1. 실패하는 테스트 작성 :  아직 구현되지 않은 기능에 대한 테스트를 먼저 작성
이 테스트는 당연히 실패할 것입니다.
2. 테스트를 통과하기 위한 코드 작성 : 테스트를 통과하기 위한 최소한의 코드를 작성
합니다.
3. 리팩토링 : 코드를 개선하고 중복을 제거합니다. 이 과정에서도 모든 테스트가 통과
해야 합니다.

이 사이클을 반복하면서 개발을 진행하게 되며, 이는 코드의 품질을 높이고 버그를 줄이
는 데 도움이 됩니다.
  • 테스트 코드 작성 순서

    1. 테스트 케이스 작성

      • TDD의 핵심은 개발 시작 전에 테스트 케이스를 먼저 작성하는 것
      import static org.junit.jupiter.api.Assertions.*;
      import org.junit.jupiter.api.BeforeEach;
      import org.junit.jupiter.api.Test;
      import java.time.LocalDate;
      
      public class DateCalculatorTest {
              private DateCalculator dateCalculator;
      
              @BeforeEach
              void setup() {
                  dateCalculator = new DateCalculator();
              }
      
              @Test
              void testCalculateAge() {
                  LocalDate birthDate = LocalDate.of(1990, 5, 15);
                  LocalDate currentDate = LocalDate.of(2022, 2, 28);
                  int expectAge = 32;
                  int actualAge = dateCalculator.calculateAge(birthDate, currentDate);
                  assertEquals(expectAge, actualAge);
              }
      
              @Test
              void testCalculateDaysBetween() {
                  LocalDate startDate = LocalDate.of(2022, 2, 15);
                  LocalDate endDate = LocalDate.of(2022, 3, 1);
                  int expectedDays = 14;
                  int actualDays = dateCalculator.calculateDaysBetween(startDate, endDate);
                  assertEquals(expectedDays, actualDays);
              }
      
              @Test
              void testIsLeapYear() {
                  int leapYear = 2024;
                  boolean isLeap = dateCalculator.isLeapYear(leapYear);
                  assertEquals(true,isLeap);
              }
          }
      
    2. 실패하는 테스트 실행

      • 테스트를 실행하면 DateCalculator 클래스가 존재하지 않기 때문에 실패
    3. 구현 코드 작성

      import java.time.LocalDate;
      
      public class DateCalculator {
          public int calculateAge(LocalDate birthDate, LocalDate currentDate) {
              return currentDate.getYear() - birthDate.getYear();
          }
      
          public int calculateDaysBetween(LocalDate startDate, LocalDate endDate) {
              return (int) startDate.until(endDate).getDays();
          }
      
          public boolean isLeapYear(int year) {
              return LocalDate.ofYearDay(year, 1).isLeapYear();
          }
      }
    4. 테스트 실행 및 성공 확인

      • 테스트를 다시 실행하면 모두 성공

      • 실패하지 않는 한 성공한 테스트를 기반으로 다음 단계로 진행

    5. 코드 리팩토링

      • 필요한 경우 코드를 리팩토링하여 가독성을 높이고 중복을 제거

    ==============================================

  • @어노테이션

    • 약속을 정의하고 있고, 정해진 곳에 표시를 해주면 프레임워크가 실행할때 동작한다.
    • 이미 정의되어 있는 것들이 많다.
  • TDD : 개발 방법론 중 하나. 테스트코드를 기반으로 개발하겠다

  • 테스트하는 도구로 JUnit 사용한다.

    • JUnit : 자바에서 x유닛을 사용하는 것.
  • 단위테스트는 개발과정에 이루어져야한다.

  • Assertions 해당 조건에 맞았을 때 판단해줄 수 있는 부분.

profile
안녕하세요, 박경서입니다.

0개의 댓글