단위 테스트와 통합 테스트

현재 스프링부트 프로젝트 중 우리가 작성한 API을 확인해보는 테스트 작업을 진행하려고 한다.
나는 자바 스프링부트의 경험이 별로 없기 때문에 테스트의 종류와 장단점을 몰라 이를 찾아보고 정리해보았다.

통합 테스트 (Integration Test)Permalink

통합 테스트는 이름에서 의미하는 바와 같이 각각의 시스템들이 서로 어떻게 상호작용하고 제대로 작동하는지 테스트하는 것을 의미한다.

통합 테스트는 유닛 테스트와 비슷한데, 큰 차이점이 하나 있다. 유닛 테스트는 다른 컴포넌트들과 독립적인 반면 통합 테스트는 그렇지 않다.

예를 들자면 유닛 테스트에서 데이터베이스에 접근하는 코드는 실제 데이터 베이스와 통신하는 것은 아니지만, 통합 테스트는 실제 통신해야 한다.

통합 테스트는 유닛 테스트만으로 충분하다고 느끼지 못할 때 사용된다. 그래서 일단 유닛테스트를 우선적으로 하고 통합 테스트를 추가적으로 한다고 한다.

때때로 두 개의 다른 분리된 시스템끼리 잘 통신하고 있는지 확인하고 싶을 때 (백엔드 서버와 데이터 베이스가 제대로 상호작용하고 있는지…) 이것을 통합 테스트라 한다.

통합 테스트는 대게 유닛 테스트를 작성하는 것보다 복잡하고 오랜 시간이 걸린다. (데이터베이스를 세팅할 때, 설정 파일을 읽어 오는 과정이라던가 데이터베이스가 잘 세팅되었는지 확인하는 과정이라던가)

따라서 통합 테스트가 꼭 필요한 것이 아니면 유닛 테스트를 작성하는데 집중하는 것이 좋고 최종 느낌으로 하는 편이라고 한다.

유닛 테스트 (Unit Test)Permalink

유닛 테스트는 전체 코드 중 작은 부분을 테스트하는 것이다. (API에서의 하나하나의 함수)
만약 테스트에 네트워크나 데이터베이스 같은 외부 리소스가 포함된다면 그것은 유닛 테스트가 아니다.

또한, 유닛 테스트는 매우 간단하고 명확하여야 한다.

기본적으로 테스트를 위한 입력 값을 주어서 그에 대한 함수의 출력 값이 정확 한지 아닌지를 판단하는 것이 유닛 테스트라 할 수 있다.

코드의 설계가 별로 좋지 못하다면 유닛 테스트를 작성하기도 어려워진다.

따라서 함수(메소드) 하나하나 테스트 코드를 작성하는 유닛 테스트는 좀 더 나은 코드를 만들 수 있도록 도와준다.

유닛 테스트를 사용한다면 좋은 코드를 디자인할 수 있을 뿐만 아니라 어떤 함수(메소드)에 변화가 생겼을 때 그 함수가 안전하게 수행되는지를 보장해주고
같은 함수(메소드)를 다른 종류의 테스트에서도 적용하기 쉽게 만들어 준다.

또한 유닛 테스트를 통해 버그가 있는지 없는지 체크하는 유닛 테스트를 만들어 둠으로써 이러한 문제를 쉽게 해결할 수 있다.

Categories:

Updated:

Comments