단위 테스트
- 하나의 모듈(기능 또는 메소드)을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트
- 어떤 기능이 실행되면 어떤 결과가 나오는지 테스트 진행
통합 테스트
- 모듈을 통합하는 과정에서 모듈 간의 호환성을 확인하기 위해 수행되는 테스트
- 애플리케이션은 여러 개의 모듈들로 구성이 되고, 모듈들끼리 메세지를 주고 받으면서(함수 호출) 기능을 수행
- 통합된 모듈들이 올바르게 연계되어 동작하는지 검증
단위 테스트(Unit Test) 작성의 필요성
- 통합 테스트
- 실제 여러 컴포넌트들 간의 상호작용을 테스트하기 때문에 모든 컴포넌트들이 구동된 상태에서 테스트
- 통합 테스트를 위해서는 캐시나 데이터베이스 등 다른 컴포넌트들과 실제 연결을 해야 함
- 시스템을 구성하는 컴포넌트들이 많아질수록 테스트를 위한 비용(시간)이 상당히 커짐!
- 단위 테스트
- 해당 부분만 독립적으로 테스트하기 때문에 어떤 코드를 리팩토링하여도 빠르게 문제 여부를 확인 가능
- 테스트에 대한 시간과 비용을 절감
- 새로운 기능 추가 시에 수시로 빠르게 테스트 할 수 있음
- 리팩토링 시에 안정성을 확보 가능
요즘 많이 사용되는 TDD(Test-Driven Development, 테스트 주도 개발) 에서 얘기하는 테스트도 단위 테스트를 의미 !
단위 테스트의 문제점과 Stub
- 문제점
- 일반적인 애플리케이션에서는 1개의 기능을 처리하기 위해 다른 객체들과 메세지를 주고 받아야 함
- 해당 모듈에 대한 독립적인 테스트이기 때문에 다른 객체와 메세지를 주고 받는 경우에 문제가 발생
- Stub
- 가짜 객체(Mock Object)를 주입하여 어떤 결과를 반환하라고 정해진 답변을 준비하는 것
좋은 단위 테스트의 특징
- 1개의 테스트 함수에 대해 assert를 최소화하라
- 1개의 테스트 함수는 1가지 개념 만을 테스트하라
좋고 깨끗한 테스트 코드 - FIRST라는 5가지 규칙
- Fast: 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 한다.
- Independent: 각각의 테스트는 독립적이며 서로 의존해서는 안된다.
- Repeatable: 어느 환경에서도 반복 가능해야 한다.
- Self-Validating: 테스트는 성공 또는 실패로 bool 값으로 결과를 내어 자체적으로 검증되어야 한다.
- Timely: 테스트는 적시에 즉, 테스트하려는 실제 코드를 구현하기 직전에 구현해야 한다.
참고 블로그:
[TDD] 단위 테스트(Unit Test) 작성의 필요성 (1/3)
1. 단위 테스트 vs 통합 테스트 차이 [ 단위 테스트(Unit Test) ] 단위 테스트(Unit Test)는 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트이다. 여기서 모듈은 애플리케이션에
mangkyu.tistory.com
'Spring Boot' 카테고리의 다른 글
@RequestParam Enum 값 받기 (1) | 2023.11.11 |
---|---|
JUnit과 Mockito 기반의 Spring 단위 테스트 코드 작성 방법 (1) | 2023.08.20 |
API 예외 처리 (0) | 2023.07.12 |
서블릿 필터, 스프링 인터셉터 (0) | 2023.07.10 |
쿠키, 세션 - 스프링 적용 (0) | 2023.07.10 |