분류
범위에 따라
•
단위(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만 테스트할 수도 있음