제품의 테스트를 크게 세 분류로 나눈 것을 피라미드 형태로 만든 것이다.
Unit Test
함수의 동작이 잘 돌아가는지 테스트하는 것을 말한다. 이때 테스트하는 함수는 외부 자원(네트워크나 데이터베이스 등)을 사용하지 않는, 독립된 함수여야 한다.
- 회사에서도 내부적으로 가장 많이 만들면 좋다고 말하는 테스트 코드다. 아무래도 외부 자원을 사용하지 않다보니 일반적으로 실행 속도가 빠르고 도메인 로직을 테스트 함에 있어 Unit test로도 충분하기 때문이지 않을까 싶습니다.
- 개인적으로 작성할 때 많은 리소스가 든다고 생각한다. 대부분의 외부 자원가 소통하는 곳을 mocking 해줘야 하는데 작성해본 경험이 적을수록 이 mocking을 하는데 리소스를 많이 써야 하는 것 같다.
Integration Test
각각의 시스템이 서로 어떤 상호작용을 하고 있으며, 정상적으로 동작하는지 테스트하는 것을 말한다. integration test 단계에서는 다른 컴포넌트들과 관계를 맺고 있어도 무관하다(상호작용에 대한 테스트이기 때문에 어찌 보면 당연하다 볼 수 있다).
- 필자는 개인적으로 캐싱 기능을 테스트할 때 사용한다.
- 테스트 커버리지를 위한 것은 아니지만 써드파티를 연동할 때 외부 API의 응답을 받아보기 위해 호출하는 로직을 Integration test로 작성합니다. 테스트 코드만 실행하면 외부 API의 응답을 받아볼 수 있어 연동 테스트할 때 편리하기 때문입니다.
End-to-End
functional test, browser test라고도 불리는 단계로, 하나의 애플리케이션으로서 정상적으로 동작하는지 테스트하는 것을 말한다.
- 아직까지 작성해본 경험이 없는 테스트 코드입니다.
참고 문헌
What are Unit Testing, Integration Testing and Functinoal Testing? | CodeUtopia