Search
📖

테스트의 종류

분류

범위에 따라

단위(Unit) 테스트
통합(Integation) 테스트
E2E(End to End) 테스트
기능(Functional) 테스트
시스템(System) 테스트
UI(User Interface) 테스트
회귀(Regression) 테스트
성능(Performance) 테스트

1. 단위(Unit) 테스트

모듈(함수/클래스) 단위의 테스트
테스트할 부분의 코드를 다른 시스템으로부터 분리(isolate)시킨 채 테스트
작성 비용이 적게 들고 실행 속도가 빠름
실패했을 때 문제가 생긴 부분을 비교적 정확하게 파악할 수 있음
경우에 따라 한두개의 단위를 모아서 하나의 단위로 취급하기도 함

Sociable vs Solitary

Sociable Tests : 의존성이 있는 다른 코드들과 함께 테스트
Solitary Tests : 테스트 더블을 이용해 완벽하게 분리시킨 채 테스트
경우에 따라 적절한 방법을 사용

2. 통합 테스트

주로 단위 테스트보다 큰 범위의 테스트를 의미
개별 모듈(함수/클래스)들이 연결되어 제대로 상호작용하는지를 테스트
단위 테스트에 비해 작성이 어렵고 실행 속도가 느림
단위 테스트에 비해 실패 시 문제가 생긴 부분을 정확히 파악하기가 어려움

Narrow vs Broad

좁은 통합 테스트 : 테스트 더블을 이용해 외부 서비스를 실제 구동하지 않고 테스트
넓은 통합 테스트 : 의존성이 있는 모든 외부 서비스를 사용하여 테스트

참고

Although I prefer to focus the definition on the interaction of separately built modules, I do occasionally see “integration test” used to mean anything bigger than a unit test. And for some users of solitary unit tests, I’ve seen them describe sociable unit tests as “integration tests”.

3. E2E 테스트

실제 사용자가 사용하는 것과 같은 조건에서 전체 시스템을 테스트
API 서버, DB 등의 외부 서비스들을 모두 사용하여 통합된 시스템을 테스트
단위/통합 테스트에 비해 작성이 어렵고 실행 속도가 가장 느림
문제가 생긴 부분을 정확히 파악하기가 가장 어려움
기능(Functional) 테스트와 비슷한 의미로 사용됨

(G)UI 테스트

백엔드 시스템을 Mocking한 채 UI만 테스트할 수도 있음

테스트 피라미드

테스트 토로피(?)

단위 vs 통합 테스트 (GIF 1)