더북(TheBook)

1.8 통합 테스트

통합 테스트는 앞서 언급한 좋은 단위 테스트 조건 중 하나라도 충족하지 못하는 모든 테스트를 의미한다. 예를 들어 테스트가 실제 네트워크, 실제 REST API, 실제 시스템 시간, 실제 파일 시스템 또는 실제 데이터베이스를 사용한다면 이는 통합 테스트에 해당한다.

예를 들어 테스트 코드에서 현재 시간을 가져오는 newDate()를 사용하면 매번 테스트를 실행할 때마다 다른 시간이 적용되므로 본질적으로는 다른 테스트가 된다. 즉, 일관성이 사라진다는 의미다. 그렇지만 이것이 꼭 나쁜 것은 아니다. 통합 테스트는 단위 테스트에서 검증하지 못하는 시스템 전체의 상호 작용을 확인할 수 있는 중요한 역할을 한다. 하지만 단위 테스트와 분리되어야 ‘안전한 그린 존’을 유지할 수 있다. 이것은 이 책 후반부에서 자세히 다룬다.

테스트가 실제 데이터베이스를 사용하면 더 이상 메모리에서만 실행되지 않게 된다. 실제 데이터베이스를 사용하면 테스트가 끝난 후 데이터를 지우는 것이 어려워진다. 모의 객체나 스텁을 사용했더라면 훨씬 간단했을 문제다. 결과적으로 테스트 실행 시간이 더 길어지고 데이터베이스 접근 속도도 쉽게 제어할 수 없다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.