[단위 테스트의 기술] 1장 : 단위 테스트의 기초

구범모·2025년 1월 8일
0

이 글은 단위테스트의 기술을 읽고 정리한 글입니다. 개인적으로 도움이 되었던 장을 정리하여 업로드합니다.

작업 단위

  • 진입점의 호출부터 하나 이상의 종료점까지, 눈에 띄는 결과가 나타날 때까지 발생하는 모든 작업.
  • 작게는 함수 하나, 크게는 여러 모듈
  • 구성 요소 : 진입점, 종료점

진입점

  • 함수 호출부

종료점

  • 의미 있는 작업
    • 의미 있는 작업이란, 아래와 같은 3가지의 눈에 띄는 동작.
    1. 단순히 값을 반환
    2. 상태 값을 변경
    3. 서드 파티 코드 호출
  • 따라서, 단위 테스트의 대상이 됨.

종료점 3가지 테스트 기법

  1. 반환 값이 있는 종료점
  • 작업 단위를 실행하여 진입점을 호출, 실행 결과 값을 받아 그 값을 확인
  • ex : 함수의 리턴값을 예상값과 비교
  1. 상태 값을 변경하는 종료점
  • 어떤 것을 호출한 후 다른 것을 호출하여 무언가를 확인하거나
  • 이전에 호출한 것을 호출하여 모든 것이 의도대로 흘러갔는지 확인
  • ex : 인스턴스의 setter함수 호출 이후 getter함수 호출하여 예상값과 비교
  1. 서드 파티를 호출하는 종료점
  • 외부에 실행 주도권이 있는 상황이므로, 직접적인 코드 간섭이 힘들다
  • 따라서 mock 객체를 만들어 테스트 결과를 임의로 조작하는 것이 가장 간편하다.

서드 파티 호출

  • 다른 말로는 의존성 호출

💡 의존성 호출이란 : 단위 테스트 중, 온전히 제어할 수 없는것을 호출하는 행위.
(파일에 무언가를 기록, 네트워크와 통신, 다른 팀이 관리하는 코드, 데이터베이스에 접근, 오래 걸리는 계산 작업 등)

좋은 단위 테스트 코드란

  • 빠르게 실행되어야 함
  • 테스트 환경을 일관되게 유지하고, 테스트 결과가 항상 예측 가능해야 함
  • 다른 테스트와 완전히 독립적으로 실행되어야 함
  • 시스템 파일, 네트워크, 데이터베이스가 없어도 메모리 내에서 실행되어야 함
  • (가능한 한) 동기적인 흐름으로 실행되어야 함

테스트 주도 개발

테스트 주도 개발 프로세스

  1. 구현하고자 하는 기능에 대한 테스트가 실패하도록 테스트를 작성
  2. 테스트가 통과할 수 있도록 코드 수정
  3. 코드 리팩터링

테스트 주도 개발의 장점

  • 테스트가 실패하는 것을 보고, 코드수정을 통하여 테스트를 성공시키는 일련의 과정을 겪음으로써,
    테스트의 신뢰성이 높아진다.

테스트 주도 개발을 잘하는 세가지 기법

  1. 좋은 테스트코드 작성
  2. 테스트코드부터 작성(프로덕션 코드 이전에)
  3. 원칙에 따라 설계
profile
우상향 하는 개발자

0개의 댓글