TDD란?

TDD란 기능을 검증하는 테스트 코드를 먼저 작성하고 테스트를 통과시키기 위해 개발을 진행하는 것은 의미한다.

테스트 범위

개발자가 코드를 조금씩 수정할 때마다 브라우저부터 DB까지 전 범위를 테스트해야 하는 것은 아니며 출시 전에 DB와 연동할 때 사용한 쿼리만 확인해서도 안된다.

테스트 범위에 따른 테스트 종류는 다음과 같이 세 가지로 나눠볼 수 있다.

image.png

  1. 기능 테스트

    기능 테스트는 사용자가 직접 사용하는 웹 크라우저나 모바일 앱부터 시작해서 데이터베이스나 외부 서비스에 이르기까지 모든 구성 요소를 하나로 엮어서 진행한다.

    QA 조직에서 수행하는 테스트가 주로 기능 테스트이다.

    ⇒ 테스트 상황을 만들어내기 위해 많은 노력이 필요하다. DB나 캐시 서버와 같은 연동 대상을 구성해야 하고, 웹 서버를 구동하거나 모바일 앱을 폰에 설치해야할 수도 있다.

  2. 통합 테스트

    통합 테스트는 시스템의 각 구성 요소가 올바르게 연동되는지 확인하다. 기능 테스트가 사용자 입장에서 테스트하는 데 반해 통합 테스트는 소프트웨어의 코드를 직접 테스트한다.

    ⇒ DB 연결, 소켓 통신, 스프링 컨테이너 초기화와 같이 테스트 실행 속도를 느리게 만드는 요인이 많다.

  3. 단위 테스트

    단위 테스트는 개별 코드나 컴포넌트가 기대한대로 동작하는지 확인한다. 단위 테스트는 한 클래스나 한 메서드와 같은 작은 범위를 테스트한다. 일부 의존 대상은 스텁이나 모의 객체 등을 이용해서 대역으로 대체한다.

    ⇒ 단위 테스트는 테스트 코드를 빼면 따로 준비할 것이 없다.

테스트케이스 작성

  1. 테스트케이스는 항상 예외값을 기준으로 작성하도록 하자.

    ⇒ 내가 의도한 조건이나 예외가 잘 발생하는지 확인!

  2. 테스트하기 어려운 영역을 잘 분리하자.

    image.png

    image.png

    image.png

    image.png

  3. Layer별 테스트코드 작성