본문 바로가기
Spring

단위테스트 vs 통합테스트 vs 인수테스트

by Jammini 2023. 5. 16.
728x90

목차

  1. 개요
  1. 단위 테스트(Unit Test)
  1. 통합 테스트(Integration Test)
  1. 인수 테스트(Acceptance Test)
  1. 결론

1. 개요

테스트를 크게 3가지 분류로 나눌 수 있는데 가장 많은 범위를 차지 하고 있는 단위 테스트 통합 테스트, 인수 테스트 순으로 위 그림 처럼 나타낼 수 있다.

이는 테스트 케이스의 개수라고 보면 될 것이고 코드 범위로 따지면 단위테스트가 가장 작고 인수 테스트가 가장 큰 것을 볼 수 있다.

2. 단위 테스트(Unit Test)

  • 단일 서버 / 단일 프로세스 / 단일 쓰레드에서 돌아가는 테스트를 말한다.
  • 테스트에 Disk I/O가 있어서는 안되고 Blocking call이 있어서도 안된다.
  • 매우 간단하고 명확해야 하며 기본적으로 테스트를 위한 입력 값을 주어 그에 대한 함수의 출력 값이 정확 한지를 판단하는 것이다.
  • 빠르고 결정적인 테스트를 여러개 만들어서 코드 커버리지를 높이고 테스트 피라미드 처럼 단위테스트가 가장 많아야 한다.

장점

  1. 격리된 환경에서 개별적인 코드 단위를 테스트하므로 디버깅과 문제 해결이 쉬움.
  1. 코드의 특정 기능을 독립적으로 검증하므로 코드의 신뢰성을 높임.

단점

  1. 개별적인 코드 단위를 대상으로 하기에 시스템 전체적인 동작은 반영하지 않음.
  1. 외부시스템이나 의존성에 대한 테스트를 제한적으로 수행하여 통합 이슈를 놓칠 수 있음.

3. 통합 테스트(Integration Test)

  • 단일 서버 / 멀티 프로세스 / 멀티 쓰레드에서 돌아가는 테스트를 말한다.
  • H2 같은 테스트용 DB를 사용할 수 있게 된다
  • 예를 들면, 개발자가 변경할 수 없는 부분까지 묶어 검증할 때 사용한다. DB에 접근하거나 전체 코드와 다양한 환경이 제대로 작동하는지 확인하는데 필요한 모든 작업을 수행할 수 있다.

장점

  1. 다양한 구성 요소간 상호작용을 테스트하여 단위테스트보다 정확하게 평가 할 수 있음.
  1. 시스템의 전체적인 작동 여부를 확인할 수 있으므로 사용자 요구 사항을 충족시킬 수 있음.

단점

  1. 테스트 케이스 작성에 대한 복잡성이 증가하여 시간이 오래 걸릴 수 있음.
  1. 의존성 문제로 테스트 환경 설정이 복잡해 질 수 있음.

4. 인수 테스트(Acceptance Test)

  • 멀티서버 환경에서 돌아가는 테스트를 말한다.
  • 시나리오(사용자 스토리) 기반으로 제대로 동작하는지 완전한 기능 테스트를 의미한다.

장점

  1. 배포 없이 받는 빠른 피드백.
  1. 도메인과 서비스 흐름 파악에 큰 도움이 됨.
  1. 도메인 이해에 예상보다 짧은 시간 소요.
  1. 실제 사용자 관점에서 요구사항을 충족하는지 확인 가능.

단점

  1. 테스트 케이스 작성시 복잡하고 번거로울 수 있음.
  1. 요구사항이 변경될 경우 테스트 케이스 작성의 시간 소요가 발생됨.

with 인수 테스트

  • 배포 없이 테스트로 대부분 검증 가능
  • 인수 테스트로 스펙 표현 가능

without 인수 테스트

  • 배포해서 기능 동작 확인
  • 페이지에서 직접 테스트
  • 수동으로 변경 사항을 확인

5. 결론

  • 앞서 말한 테스트들이 잘 작성되어 있다면 기능을 추가 할 때 테스트 코드로 인해 빠른 피드백을 받을 수 있는 방법이 되는 것이다.
  • 즉, 리팩토링이 이루어져도 기본 테스트가 정상적으로 성공되었다면 심리적 안정감과 자신감을 주는 든든한 지원군이 생긴 것과 같을 것이다.

참고

반응형