본문 바로가기
Java+Spring 박살내기

통합 테스트와 단위 테스트

by 창브로 2024. 7. 8.
728x90

오늘은 통합 테스트와 단위 테스트를 비교해 보며 알아보겠습니다

우선 통합 테스트란?

모듈을 통합하는 과정에서 모듈 간의 호환성을 확인하기 위해 수행되는 테스트입니다.
통합 테스트는 독립적인 기능에 대한 테스트라기보다
웹 페이지로부터 API를 호출하여 올바르게 동작하는 지를 확인하는 것입니다.

단위 테스트란?
하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트입니다.
메서드 하나의 독립적인 기능을 테스트한다고 보면 됩니다.

그럼 이 둘은 어떤 차이가 있는지 알아봅시다.

 

테스트 환경의 차이

통합 테스트는 애플리케이션 전체를 로드하여 실제 환경과 유사한 조건에서 테스트를 수행합니다.
반면에 단위 테스트는 격리된 환경에서 하나의 메서드가 독립적으로 잘 동작하는지 테스트를 수행합니다.

 

의존성 관리 방식 차이

통합 테스트에서는 @MockBean을 사용하여 실제 컴포넌트와의 상호작용을 모의합니다. 즉 실제 환경과 비슷한 환경에서 상황을 테스트합니다.
단위 테스트는 @Mock과 @InjectMocks 어노테이션을 사용합니다. @Mock은 특정 의존성을 모의 객체로
만들고 @InjectMocks는 모의 객체들을 주입하여 테스트할 대상 객체를 생성해 줍니다.

 

테스트 실행 방식 차이

통합 테스트에서는 MockMvc를 이용하여 HTTP 요청과 응답을 통해 컨트롤러의 전체적인 행동을 검증합니다.
단위 테스트에서는 각각의 메서드를 직접 호출하여 메서드가 기대한 대로 동작하는지 검증합니다.

 

목적과 효율성

통합 테스트는 애플리케이션의 전반적인 동작과 메서드 간의 상호작용을 검증하는 것을 목적에 둡니다.
단위 테스트는 상호작용보단 각각의 기능과 정확성을 빠르고 효율적으로 검증하는 것입니다.

 

 

아래 예시 코드를 보고 이해하시면 더 편할 것 같아요!

 

통합 테스트 예시

 

단위 테스트 예시

 

이제 각각의 장/단점을 알아보면 좋겠죠?

단위 테스트는 테스트 환경을 간단하게 설정할 수 있고 빠르게 실행되며 복잡한 종속성 없이 테스트를 진행할 수 있고 하나의 단위만 테스트하기 때문에 문제 식별도 쉽다는 장점이 있습니다.

단위 테스트의 단점으론  시스템 전체적인 동작을 검증할 수 없고 단위 테스트에서 오류가 나지 않는다고 한들 실제 서비스에서는 호환성에서 오류가 날 수 있는 확률이 있습니다.

 

통합 테스트의 장점은 실제 서비스와 같은 환경에서 테스트를 진행할 수 있어 실제 서비스에서 발생할 수 있는 오류를 조기에 발견할 수 있다는 장점이 있습니다.

하지만 단점으론 실행 속도가 느리고 문제 식별이 어렵다는 단점이 있습니다.


각각의 상황에 맞춰 테스트 방식을 적절히 조합하여 사용할 수 있어야 할 것 같습니다!