테스트 주도 개발로 배우는 객체지향 설계와 실천
이라는 책과 Acceptance Test vs Integration Test 블로그의 글을 합쳐서 작성한 각 테스트들의 종류와 특징이다.
유닛 테스트(Unit Test)
- 가장 작은 단위의 테스트이다
- 보통 메서드 레벨이다
- A라는 함수가 실행되면 B라는 결과가 나온다 정도로 테스트한다
- 즉각적인 피드백이 나온다는 것이 훌륭한 장점이다
- 꼭 메모리 내에서만 실행되는 테스트여야 한다는 법칙은 없다
- 데이터베이스, 네트워크 엑세스, 파일 시스템 등을 사용하여도 단위테스트의 레벨일 수 있다
- 테스트하기 어려운 부분은 stub을 사용하여 테스트한다
- 비용이 크지 않다면 stub보다는 실제 객체를 사용하는 것이 좋다
- 아무래도 정교한 목 객체가 실제 객체보다 정확하지는 않기 때문이다
- 모든 것은 비용 관점에서 생각해야 한다
- 하나의 메서드들이 잘 동작한다는 것은 보장할 수 있지만, 그들이 결합되었을때도 잘 작동한다는 것은 보장할 수 없다
전 구간 테스트(End-To-End Test)
- 해당 시스템과 해당 시스템을 구축하고 배포하는 프로세스를 모두 시험하는 것을 말한다
- 용어를 사용하는 곳마다 조금씩 차이가 있다
- 내부 기능들까지(클래스의 메서드들까지) 테스트 할 필요는 없다
- 이는 단위테스트의 영역이다
- 단점은 테스트를 만들기가 힘들고, 만든 테스트를 신뢰하기도 힘들다는 것이다
통합 테스트(Integration Test)
- 기본적으로 여러개를 통합해서 테스트 할때 사용하는데, 뭔가 정확한 용어가 정의된 느낌은 아니다
- 책에서는 변경할 수 없는 부분(외부 라이브러리 등)까지 묶어서 같이 테스트 할 떄 사용한다고 말하고 있다
- 사용하는 곳에서 어떻게 사용하는 가에 따라 다른 것 같다
- 그래서 난 사용하지 않을 것이다
인수 테스트(Acceptance Test)
- 단위 테스트, 전 구간 테스트, 통합 테스트와는 약간 scope 가 다르다
- 위의 3가지는 초점이 기술 쪽이라면, 인수 테스트는 초점이 비즈니스 쪽이다
- 구현하고자 하는 기능(비즈니스 레벨)에 대한 테스트이다
- 대체적으로 전 구간 테스트를 사용하여 기능을 테스트한다
- 그래서 이를 동일하게 얘기하는 곳도 많다
- 하지만 결과적으론, 위 3가지 모두 인수테스트의 범위에 들어갈 수 있다
- 보험금액을 계산하는 어플리케이션에서는
보험금액을 계산하는 메서드 단위 테스트
가 인수테스트가 될 수 있다
- 보험금액을 계산하는 어플리케이션에서는