✏️ 코드 테스트

원영·2024년 1월 22일
0

✨TDD

  • 코드 작성 전에 테스트 코드를 작성하고, 테스트에 통과하도록 코드를 작성하는 것
  • 코드 작성 전에 실패하는 테스트를 먼저 실행하고, 코드 작성 후에 통과하는 테스트로 확인

✨RTL(React Testing Library)

  • 내부 코드 구현을 테스트 보다는 사용자의 소프트웨어 사용 테스트를 권장 (기능 테스트 권장)
  • 테스트 위한 가상 DOM 생성 및 상호 작용을 위한 유틸리티 제공
  • DOM에서 요소 찾거나 클릭과 같은 상호작용 가능
  • 브라우저 없이 테스트 가능

✨테스트 종류

유닛 테스트

  • 함수나 별개의 React 컴포넌트코드의 한 유닛 혹은 단위를 테스트
  • 다른 코드의 유닛과 상호 작용은 테스트 X
  • 함수 단위 테스트
    • 함수가 너무 복잡해서 테스트하려는 모든 극단적인 경우에 대해 컴포넌트를 렌더링 할 필요가 없는 경우
    • 기능 테스트의 실패 원인을 확인하고 싶을 때도 유용
    • 기능 테스트는 동작이 변하지 않는 한 통과 → 실패 시 원인 찾기가 어려움
    • 기능 테스트를 구성하는 함수들을 단위 테스트 해둔다면 쉽게 원인 파악 가능

통합 테스트

  • 여러 유닛이 함께 작동하는 방식(유닛 간의 상호 작용) 테스트

기능 테스트

  • 소프트웨어의 특정 기능(동작) 테스트
  • 코드가 아닌 동작 테스트
    • 데이터를 폼에 입력하고 제출 클릭 시 소프트웨어가 특정 데이터 세트로 바르게 작동하는 기능 확인
    • 입력란에 잘못된 데이터를 입력하면 빨갛게 변하는지 테스트

인수(Acceptance) / End to End(E2E) 테스트

  • 실제 브라우저, 애플리케이션이 연결된 서버 필요
  • 보통 Cypress, Selenium 필요
  • RTL을 위해 설계된 테스트는 아님

✨유닛 테스트 vs 기능 테스트

유닛 테스트

  • 테스트 최대한 격리
  • 함수나 컴포넌트가 의존하는 다른 함수가 있으면 실제 버전 말고 테스트 버전 사용
  • 문제 발생 시 해당 유닛이 원인
  • 사용자가 소프트웨어와 상호 작용을 실패해도 통과할 수 있음
  • 리팩토링 후 동작이 동일해도 테스트 실패할 수 있음
    이유 : 리팩토링은 코드 동작은 그대로인데 작성 방식을 바꾸는 것, 보통 유닛테스트로 코드 작성 방식 테스트

기능 테스트

  • 테스트하는 특정 동작, 유저 플로우와 연관된 모든 단위 포함
  • 사용자가 소프트웨어와 상호 작용하는 방식과 밀접
  • 문제 발생 시 사용자에게 문제가 발생할 가능성 높음
  • 리팩토링 후 동작이 동일하다면 테스트 통과(테스트 견고)
  • 어떤 부분의 코드가 테스트 실패의 원인인지 파악하기 어려움
profile
화이팅~~^ㅁ^/

0개의 댓글