테스트 범위에 따른 테스트 종류
테스트의 범위는 테스트의 목적과 수행하는 사람에 따라 달라진다.
일반적인 웹 어플리케이션에서 테스트 범위에 따른 테스트 종류는 아래의 그림과 같이 세 가지로 나눌 수 있다.
기능 테스트와 E2E 테스트
기능 테스트는 사용자 입장에서 시스템이 제공하는 기능이 올바르게 동작하는지 확인한다.
기능 테스트를 수행하려면 시스템을 구동하고 사용하는데 필요한 모든 구성 요소가 필요하다.
기능 테스트는 사용자가 직접 사용하는 웹 브라우저부터 DB나 외부 서비스에 이르기까지 모든 구성 요소를 논리적으로 완전한 하나의 기능으로 다룬다.
기능 테스트는 끝에서 끝까지 올바른지 검사하기 때문에 E2E 테스트로도 볼 수 있다.
기능 테스트의 결과를 검증하기 위해 DB 데이터를 직접 조회할 수는 있지만, 이것은 마치 테스터가 브라우저로 회원 가입 기능을 실행한 뒤에 DB에 SELECT 쿼리를 보내서 데이터가 잘 들어갔는지 확인하는 것과 같다. 보통의 기능 테스트라면 회원 가입을 실행한 후에 데이터가 올바르게 들어갔는지 확인하기 위해 개인 정보 조회 화면을 실행하거나 관리 도구의 회원 정보 조회 기능을 실행할 것이다. 부득이한 경우를 제외하면 기능 테스트는 사용자와 동일한 방식으로 기능을 검증해야 한다.
통합 테스트
통합 테스트는 시스템의 각 구성 요소가 올바르게 연동되는지 확인한다.
기능 테스트가 사용자 입장에서 테스트하는데 반해, 통합 테스트는 소프트웨어 코드를 직접 테스트한다.
기능 테스트는 가입 기능을 테스트한다면 통합 테스트는 서버의 회원 가입 코드를 직접 테스트하는 것이다.
일반적인 웹 어플리케이션은 프레임워크, 데이터베이스, 구현한 코드가 주요 통합 테스트의 대상이다.
단위 테스트
단위 테스트는 개별 코드나 컴포넌트가 기대한대로 동작하는지 확인한다.
단위 테스트는 한 클래스나 한 메서드와 같은 작은 범위를 테스트한다.
일부 의존 대상은 스텁이나 모의 객체 등을 이용해서 대역으로 대체한다.
테스트 범위간 차이
-
기능 테스트
웹 서버를 구동하거나 모바일 앱을 폰에 설치해야 할 수도 있다. 브라우저나 앱을 구동하고 화면의 흐름에 따라 알맞은 상호 작용을 해야 한다.
-
통합 테스트 : 실행하려면 DB나 캐시 서버와 같은 연동 대상을 구성해야 한다.
DB 연결, 소켓 통신, 스프링 컨테이너 최고하와 같이 테스트 실행 속도를 느리게 만드는 요인이 많다.
- 단위 테스트 : 코드를 제외하고는 따로 준비할 것이 없다.
서버를 구동하거나 DB를 준비할 필요가 없다. 테스트 대상이 의존하는 기능을 대역으로 처리하면 되므로 실행속도가 빠르다
통합 테스트를 실행하려면 준비할 것이 많고 단위 테스트에 비해 실행 시간도 길지만, 그래도 통합 테스트는 필요하다. 아무리 단위 테스트를 많이 만든다고 해도 결국은 각 구성 요소가 올바르게 연동되는 것을 확인해야 하는데 이를 자동화하기 좋은 수단이 통합 테스트 코드이기 때문이다.