테스트 범위와 종류 : 단위 테스트, 통합 테스트

2025. 3. 8. 22:44개발

TDD 단위 테스트 vs 통합 테스트 정리

필자는 TDD를 배우기 전, ‘단위 테스트가 모여 통합 테스트가 되는건가?’라는 막연한 생각을 가지고 있었다.

여러 TDD의 예제를 살펴 보면서

  • ‘이건 메소드니까 단위 테스트겠지?’
  • ‘이건 클래스를 대상으로 테스트 하는거니까 통합테스트겠지?’

라는 생각으로만 그쳤는데, 이제 TDD의 단위 테스트통합 테스트가 무엇인지, 이 둘이 어떻게 서로 다른지를 이해 해보자.

📌 테스트 범위


일반적인 웹 어플리케이션은 다음과 같은 구성 요소를 갖는다.

웹 애플리케이션의 일반적인 구성 요소

  • 컨트롤러, 서비스, 모델과 같은 자바 코드와 프레임워크 설정에 문제가 없어야 할 뿐 아니라
  • 브라우저에서 실행되는 자바스크립트 코드, HTML과 CSS 등이 정상 작동해야 한다.
  • 또한, DB의 테이블도 올바르게 생성되어 있어야 한다.

개발자가 코드를 조금씩 수정할 때마다 브라우저부터 DB까지 전부 테스트해야 하는 것은 아니다.

테스트의 범위는 테스트의 목적과 수행하는 사람에 따라 다르다.

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

✅ 기능 테스트 : 모든 구성 요소를 하나로 엮어서 테스트

기능 테스트는 사용자 입장에서 시스템이 제공하는 기능이 올바르게 동작하는지 확인한다.

이 테스트를 수행하려면 시스템을 구동하고 사용하는 데 필요한 모든 구성요소가 필요하다.

  • 예를 들어, 회원 가입 기능이 올바르게 작동하는지 확인하려면 웹 서버, 데이터베이스, 웹 브라우저가 필요하다.
  • 문자 발송 기능이 필요하다면 외부의 문자 발송 서비스도 필요하다!

✅ 통합 테스트 : 서로 다른 함수나 메소드가 올바르게 상호작용 하는가?

통합 테스트는 시스템의 각 구성 요소가 올바르게 연동되는지 확인한다.

즉, 여러 함수나 메소드가 함께 작동할 때 올바르게 작동하는지를 검증하는 테스트이다. 이는 서로 함수나 메소드들이 올바르게 상호작용하고 데이터를 주고받는지 확인하는 것이 목적이다.

기능 테스트가 사용자 입장에서 테스트하는 것과는 달리, 통합 테스트는 소프트웨어의 코드를 직접 테스트한다.

  • 모바일 앱을 예로 들면, 기능 테스트는 앱을 통해 가입 기능을 테스트한다면 통합 테스트는 서버의 회원 가입 코드를 직접 테스트하는 식이다.

일반적인 웹 앱은 프레임워크 라이브러리, DB, 구현한 코드가 주요 통합 테스트 대상이다. 스프링, JPA 등을 이용해서 회원 가입 관련된 클래스, DAO 인터페이스를 구현했다면 이들을 통합한 회원 가입 서비스에 대한 테스트가 통합 테스트 예가 될 수 있다.

✅ 단위 테스트 : 개별 코드나 컴포넌트가 기대한대로 동작하는가?

단위 테스트개별 코드나 컴포넌트가 기대한대로 동작하는지 확인한다. 이는 코드의 각 부분이 개별적으로 정상 작동하는지 확인하는 것이 목적이다.

단위 테스트는 한 클래스나 한 메서드와 같은 작은 범위를 테스트한다. 일부 의존 대상은 스텁이나 모의 객체 등을 이용해서 대역으로 대체한다.

앞서, TDD : 테스트 주도 개발 방법론 에서 calculatorTest도 단위 테스트에 해당된다.