◎ 테스트 코드 작성
1. 테스트 코드 작성 이유
- 분리되어 있는 각자의 기능들을 하나씩 테스트함으로써 각 기능들에 대한 검증이 가능하다.
- 단위 테스트(TDD)를 기준으로 굳이 통합 환경을 전부 메모리에 올릴 필요 없이 검증이 필요한 부분에 대해서만 메모리에 로드하고 테스트할 수 있기 때문에 시간적으로 유리하다.
- 요구 명세에 따른 세부적인 시퀀스 다이어그램이나 클래스 다이어그램의 각자의 역할에 대한 검증 과정도 테스트 코드 작성 시 훨씬 편리하게 관리하고 작성할 수 있다.
2. 단점
- 아무래도 테스트 코드 환경을 따로 관리하고 작성해야 하기 때문에 크지 않은 프로젝트에서 테스트 관리 없이 바로 통합 환경에서 개발을 하는 것보다 시간적으로 오래 걸릴 수 있다.
- 수정에 있어서 하나의 코드를 통합환경 + 테스트환경 모두 수정해야 하기 때문에 번거로울 수 있고 테스트 코드 관리를 하지 못하면 오히려 불편할 수 있다.
◎ 테스트 종류 (3가지)
1. 단위 테스트 (Unit Test)
- 하나의 작은 기능들에 대한 테스트를 진행한다.
- 구현한 기능이 많을 수록 단위 테스트를 작성하는 데에 상당히 오랜 시간 소요될 수 있지만 이후 유지보수 측면에서 유리하게 관리할 수 있다.
2. 통합 테스트 (Integration Test)
- 하나의 시퀀스 단위로 테스트를 진행한다.
- 단위 테스트는 기능을 최대한 세분화하여 하나씩 검증하는 거라면 통합 테스트는 여러 가지 기능들이 서로 각자가 수행해야 하는 일들을 처리하고 그에 따른 이상적인 결과가 나오는지 확인할 수 있다.
3. E2E 테스트 (End to End Test)
- 실제 사용자 관점에서 테스트를 진행한다.
- 단위 테스트와 통합 테스트는 "기능" 에 초점을 맞추고 각 클래스와 메서드가 올바른 기능을 수행하는지 확인하는 것이라면 E2E 테스트의 경우에는 사용자의 관점에서 동작의 결과가 잘 나오는지 확인하는 과정이다.
- 따라서 기능에서 결과가 잘 나오는 것과 실제 인터페이스에서 잘 동작하는 것은 다르기 때문에 단위 테스트와 통합 테스트에서 만족스러운 결과를 얻었더라도 E2E 테스트에서 만족스럽지 못한 경우가 발생할 수 있다.
- 사용자 관점에서 테스트를 진행하는 것이기 때문에 사실상 테스트의 최종 과정이라고 할 수 있다.