Unit Test (단위테스트)

응용프로그램에서 테스트 가능한 가장 작은 소프트웨어를 실행하여 예상대로 동작하는지 확인하는 테스트
= 어떤 기능이 실행되면 어떤 결과가 나온다 정도의 테스트

  • 테스트 대상 단위의 크기 : 일반적으로 클래스 또는 메소드 수준
  • 단위의 크기가 작을수록, 단위의 복잡성 낮아짐
    • 테스트 대상 단위의 크기를 작게 설정해서
      단위테스트를 최대한 간단하고 디버깅하기 쉽게 작성해야함!

단위테스트 작성의 필요성

  1. 테스팅에 대한 시간, 비용 절감
  2. 새로운 기능 추가 시 수시로 빠르게 테스트 가능
  3. 리팩토링 시 안정성 확보
  4. 코드에 대한 문서가 될 수 있음

단위테스트의 문제점

해당 모듈이 다른 객체와 메시지를 주고받는 경우 문제 발생

  • 해결 : 가짜 객체(Mock Object) 주입하여 어떤 결과를 반환하라고 정해진 답변 준비시킴 (stub)

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

TDD에서 얘기하는 테스트도 단위테스트 의미

좋은 단위테스트!

  • 1개의 테스트함수에 대해 assert 최소화하기
  • 1개의 테스트함수는 1가지 개념만 테스트하기
  • FIRST 규칙
    • Fast : 테스트는 빠르게 동작하여, 자주 돌릴 수 있어야함
    • Independent : 각각의 테스트는 독립적
    • Repeatable : 어느 환경에서도 반복 가능
    • Self-Validating : 결과가 bool 값(테스트 성공, 실패)으로 -> 자체적으로 검증되어야 함
    • Timely : 테스트하려는 실제코드를 구현하기 직전에 구현해야함

=> 내가 개발한 코드를 바로 검증받고, 테스트를 통과하지 못하면 코드 수정해 다시 빠르게 검증받기
수시로 실행 - 검증 - 버그를 잡고, 개발비용을 줄여나가는 것이 테스트의 가치


Integration Test (통합테스트)

단위테스트보다 더 큰 동작을 달성하기 위해 모듈을 통합하는 과정에서 모듈간의 호환성 확인하는 테스트

  • 웹페이지로부터 API를 호출하여 올바르게 동작하는지 확인
  • 개발자가 변경할 수 없는 부분(외부 라이브러리 등)까지 묶어 검증할 때 사용
  • DB에 접근하거나 전체코드와 다양한 환경이 제대로 작동하는지


Reference
https://mangkyu.tistory.com/144
https://tecoble.techcourse.co.kr/post/2021-05-25-unit-test-vs-integration-test-vs-acceptance-test/

업데이트: