Jest를 활용한 유닛 테스트

2024. 12. 11. 21:59NestJs

728x90
반응형

 

서론 

유닛 테스트는 단순한 기능 검증을 넘어 시스템 안정성과 코드 품질을 보장하는 중요한 요소입니다. 이번 프로젝트에서는 전체 서비스의 다양한 기능에 대해 Jest를 사용하여 유닛 테스트 코드를 작성하였고, 이를 통해 테스트 커버리지를 17.3% 향상시켰습니다. 이 블로그에서는 Jest를 활용한 유닛 테스트를 어떠한 이유로 작성하게 되었는지에 대한 배경을 공유합니다.

 

 

왜 테스트 코드를 작성했는가?

프로젝트에서 작성한 테스트 코드는 주요 로직, 에러 처리, 비동기 로직, 그리고 보조 기능들까지 모두 포함되어 있습니다. 다음은 테스트 코드를 작성하며 중점적으로 작업한 이유들입니다:

  1. 핵심 로직 검증
    서비스의 주요 로직을 철저히 검증하기 위해 각 기능별로 최소 3~4개의 테스트를 작성했습니다.
    • 예: TTS API 호출, 음성 파일의 저장 과정, 사이즈 추천 로직
  2. 에러 처리 검증
    예상치 못한 에러가 발생할 수 있는 모든 경우를 테스트에 포함시켰습니다.
    • 예시: 잘못된 입력 데이터 처리, 외부 API 호출 실패 시 예외 처리, 데이터베이스 연결 문제 발생 시의 예외 처리
  3. 경계값 테스트
    입력 데이터의 최소값, 최대값, 빈 값 등 경계값을 중심으로 테스트 케이스를 작성했습니다.
    • 예: 음성 변환 요청에서 다국어 입력 텍스트가 없는 경우
  4. 코드 리팩토링을 대비
    코드 변경으로 인한 기능 손상을 방지하기 위해, 작성한 테스트 코드를 통해 리팩토링 후에도 기존 기능이 정상 작동하는지 확인할 수 있도록 했습니다.

 

유닛테스트 작성 시 유의할 점

F.I.R.S.T  법칙

Fast (빠름) 테스트는 빠르게 실행되어야 하며, 가능한 한 짧은 시간 안에 결과를 제공해야 합니다.
Independent (독립적) 각 테스트는 서로 독립적으로 실행되어야 하며, 하나의 테스트가 다른 테스트에 영향을 주지 않아야 합니다.
Repeatable (반복 가능) 테스트는 언제 어디서나 동일한 결과를 제공해야 하며, 환경에 의존하지 않아야 합니다.
Self-Validating (자체 검증) 테스트는 성공 또는 실패를 자동으로 판별할 수 있어야 하며, 수동으로 검증할 필요가 없어야 합니다.
Timely (적시성) 테스트는 개발 과정에서 적시에 작성되어야 하며, 코드 작성 후 가능한 빨리 작성하는 것이 좋습니다.

 

  • 각 테스트는 서로 독립적으로 실행되어야 하며, 다른 테스트의 결과에 영향을 주지 않아야 합니다.
  • 가독성이 높아야 다른 개발자들이 쉽게 이해하고 수정할 수 있으며, 코드 리팩토링 시에도 기능이 손상되지 않도록 도와줍니다.
  • 중복되는 코드를 최소화하고, 각 테스트가 독립적으로 실행될 수 있도록 리팩토링을 하여 유지보수성을 높였습니다.

 

 

작성 과정에서 얻은 경험

  1. 테스트를 통해 중복 코드 제거
    유닛 테스트를 작성하면서 기존 로직에서 중복된 코드가 존재한다는 점을 발견했습니다. 이를 통해 중복 코드를 제거하고, 보다 효율적이고 간결한 로직으로 리팩토링할 수 있었습니다.
  2. Promise.allSettled 활용으로 안정성 향상
    TTS 기능을 테스트하는 과정에서 비동기 작업 중 일부가 실패하면 전체 프로세스가 중단될 위험이 있다는 문제를 발견했습니다. 이를 해결하기 위해 Promise.allSettled를 도입하여 각 작업의 성공과 실패를 독립적으로 처리하도록 개선했습니다. 덕분에 일부 작업이 실패하더라도 전체 서비스에는 영향을 주지 않도록 안정성을 확보할 수 있었습니다.
  3. 테스트 코드 작성의 중요성 실감
    처음에는 테스트 코드를 작성하는 과정이 번거롭고, 그 필요성을 명확히 이해하지 못했습니다. 하지만 작성을 진행하면서 테스트 코드가 코드의 간결화를 도울 뿐 아니라, 개발한 기능이 다양한 호출 상황에서도 안정적으로 동작하도록 만드는 데 큰 역할을 한다는 것을 깨달았습니다. 이를 통해 테스트 코드가 단순한 검증 도구를 넘어, 신뢰성과 품질을 보장하는 핵심 도구임을 이해할 수 있었습니다.
 
 
 
728x90
반응형