logo
Published on

[React Testing] 통합테스트 개념과 대상

Authors
  • avatar

    jangth

단위테스트를 작성하다 보면 단위테스트의 한계를 알 수 있는데, 단위 테스트이 한계는 무엇일까? 단위테스트는 일부 모듈만을 대상으로 검증하기 때문에 여러 모듈의 조합 즉 컴포넌트들의 상호작용 또는 조합되었을 때 동작을 검증 할 수 없다. 따라서 여러 모듈이 조합되어 상호작용하는 테스트가 필요하다.

통합테스트

상태나 데이터를 관리하는 특정 컴포넌트를 기준으로 하위 컴포넌트가 제대로 렌더링 되는지 혹은 상위 컴포넌트와 하위 컴포넌트간의 동작올바른지 검증하는 테스트

통합 테스트를 호율적으로 작성하고 운영하기 위해서는 컴포넌트의 조합을 어떤 범위로 나눌지가 매우 종요하다. 그렇기 때문에 데이터를 관리하는 로직이 산재되어 있다면 통합테스트 작성이 매우 어렵다. 결국 통합테스트를 잘 작성하기 위해서는 좋은 설계가 기반이 되어야한다.

통합테스트는 무엇을 검증하는 것일까?

  • 두 개 이상의 모듈이 상호작용하여 발생하는 상태를 검증
  • API﹒상태 관리 스토어﹒리액트 컨텍스트 등 다양한 요소들이 결합된 컴포넌트가 특정 비즈니스 로직을 올바르게 수행 하는지 검증
  • 주로 컴포넌트 간의 상호작용과 API 호출, 상태 변경에 따른 UI 변경사항을 검증한다.

통합테스트 대상

통합 테스트가 컴포넌트 간의 상호작용에 따른 기능이 올바르게 동작하는지를 테스트 하지만, 만약 통합테스트 대상으로 하나의 페이지 또는 하나의 컴포넌트 내에서 API 호출, 여러 상태관리등과 같은 수 많은 컴포넌트들을 함께 테스트 하는 경우, 즉 거대한 통합테스트를 진행하는 경우 아래와 같은 이유로 테스트의 신뢰를 깨뜨리게된다.

  • 모킹 코드 증가 -> 지나친 모킹으로 테스트 신뢰성 저하
  • 일부 컴포넌트만 수정해도 많은 테스트가 깨질 수 있음
  • 유지 보수에 많은 비용이 듦

통합테스트 장점

비즈니스 로직을 기준으로 통합테스트 작성!

  • 서비스의 핵심 비즈니스 로직을 독립적인 기능 관점에서 효율적으로 검증
  • 테스트를 명세 자체로 볼 수 있어 앱을 이해하는데 큰 도움이 된다.
  • 불필요한 단위테스트를 줄여 유지보수 측면에서도 좋다.

✅ 비즈니스 로직이란?

  • 프로그램의 핵심 기능을 구현하는 코드
  • 사용자가 원하는 결과를 얻기 위한 계산﹒처리﹒의사 결정을 수행하는 코드
  • API 통신, UI 상태 관리, 이벤트 핸들러 처리 등