티스토리 뷰

TDD와 단위테스트는 다르다.
단위테스트로 먼저 연습하고 TDD에 점차 익숙해지자.

추천서적

Unit Test (단위 테스트)

■ Production code
■ Test code => JUnit

Annotation을 활용

JUnit 5.x

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class CalculatorTest {
    Calculator cal;

    @BeforeEach
    public void setUp()  {
        cal = new Calculator();
    }

    @Test
    public void 덧셈()  {
        assertEquals(7, cal.add(3, 4));
    }

    {...}

    @AfterEach
    public void tearDown() {
        cal = null;
    }
}

JUnit 4.x

public class CalculatorTest {
    @Before
    public void setup() {
      System.out.println("setup");
    }

    @Test
    public void test1() throws Exception {
      System.out.println("test1");        
    }

    {...}

    @After
    public void teardown() {
      System.out.println("teardown");        
    }
}

  • 테스트 코드도 코드다. 중복 제거

  • 테스트코드의 클래스명 convention은 "productioncode+Test"

  • 테스트 코드의 메소드명은 함께 일하는 동료들이 모두 한국인이라면 한글도 허용되는 분위기

  • 모든 테스트케이스(@Test)는 의존성을 갖지 않도록, 독립적으로 설계

  • 기본적으로 테스트 해야할 대상들 : if문, 경계값, 부등호 등

  • given-when-then 방식은 무조건 사용하지말고, 테스트코드가 복잡할때만

  • UI 즉, IO와 관련한 로직은 테스트하기 어렵다. 핵심로직 위주로 테스트
    IO, Random, 날짜관련, DB, 외부API 등과 관련된 부분들도 테스트하기 어렵다.

  • 테스트 가능한 코드와 테스트하기 힘든 부분을 분리

    public class Car {
      private static final int FORWARD_NUM = 4;
    
      private int position;
    
      [...]
    
      public void move() {
          if (getRandomNo() >= 4)
              this.position++;
      }
    
      public int getRandomNo() {
          Random random = new Random();
          return random.nextInt(10);
      }
    }

    위의 코드는 Random때문에 단위테스트하기 힘들다. 아래와 같이 리팩토링해
    테스트 가능한 부분과 힘든 부분을 분리하자.

    public void move(int number) {
          if (number >= FORWARD_NUM) {
              position++;
          }
      }

TDD (Test Driven Development, 테스트 주도 개발)

TDD = TFD(Test First Dev) + Refactoring


대표 그림

  • 가볍게 다룰수있는 주제가 아니다. 하나의 철학같은 느낌. 검색해서 다른 자료들을 찾아보고 그 의미와 가치를 이해해보자.
  • 처음엔 막막할것. Out->In 방식으로 접근

TDD 참고자료

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함