단위 테스트란,
코드가 제대로 작동하는지 확인하기 위해 애플리케이션의 개별 모듈을 독립적으로 테스트 (종속성과의 상호 작용없이)하는 것을 의미합니다.
통합 테스트란,
다른 모듈이 그룹으로 결합 될 때 잘 작동하는지 확인하는 것을 의미합니다.
간단한 예로 기능성 휴대폰을 사용할 경우 필요한 주요 부품은 "배터리"와 "유심 카드"입니다.
단위 테스트 예)
통합 테스트 예)
단위 테스트를 작성해야 하는 이유는 정말 너무 많다. 그 중에서 몇 가지 핵심적인 이유들을 작성하면 다음과 같다.
우리는 개발이 끝난 뒤 문제가 있는지 없는지 확인하기 위해 애플리케이션을 실행하고, 직접 통합(수동)테스트를 진행해야 한다.
단위 테스트를 거치지 않은 코드들은 테스트를 거친 코드들 보다 버그가 있을 확률이 높다.
우리는 개발 및 테스팅에 대한 비용을 줄이기 위해 단위 테스트를 작성한다.
TDD의 궁극적인 목표는 깔끔한 코드를 작성하는 것이다. TDD의 개발단계에 리팩토링이 있는데, 리팩토링을 거쳐가며 중복된 코드들은 제거되고, 복잡한 코드들은 깔끔하게 정리하게 된다.
실패하는 작은 단위 테스트를 작성한다. 처음에는 컴파일조차 되지 않을 수 있다.
빨리 테스트를 통과하기 위해 프로덕션 코드를 작성한다. 이를 위해 정답이 아닌 가짜 구현 등을 작성할 수도 있다.
그 다음의 테스트 코드를 작성한다. 실패 테스트가 없을 경우에만 성공 테스트를 작성한다.
새로운 테스트를 통과하기 위해 프로덕션 코드를 추가 또는 수정한다.
1~4단계를 반복하여 실패/성공의 모든 테스트 케이스를 작성한다.
개발된 코드들에 대해 모든 중복을 제거하며 리팩토링한다.