좋은테스트, FIRST 속성

텐저린티·2024년 1월 13일
0

알쓸신잡

목록 보기
5/10
post-thumbnail

좋은 테스트란 무엇일까?

정답은 없다.

다만, 좋은 테스트로 느껴지는 코드가 공유하는 몇 가지 특성이 있다.

FISRT 속성은 그런 편-안한 테스트가 갖는 공통 특성이다.

🛎️ FIRST

  • Fast
  • Isolated
  • Repeatable
  • Self-validating
  • Timely

1️⃣ Fast → 빠른 속도

  • 빠른 테스트
    • 외부시스템(DB, 네트워크) 접근 X
    • 로컬 로직코드만 실행
    • N millisec
  • 느린 테스트
    • 외부시스템 접근 O
    • 외부 자원 접근하는 코드 실행
    • 10^n millisec
  • 판단방법
    • 단위테스트를 하루에 3번 이상 하기 어렵다? → 뭔가 잘못
    • 통합테스트 불가능하다 → 상당히 잘못되었다.
  • 테스트 방법
    • DB 작업에 대한 map을 만들어서 map을 테스트 → 로컬 코드 테스트
    • mock 을 이용한 외부 자원 반환값 테스트

2️⃣ Isolated → 독립된 테스트

  • 최대한 테스트 대상이 작아야 함.
  • 단위(Unit; 코드)에 집중
  • 외부시스템과의 상호작용은 테스트 실패 가능성을 증대
    • 가용성, 접근성 ⬇️
  • 다른 단위 테스트에 의존 X
    • 가급적 TestInstance를 PER_METHOD(기본값)으로 두고 사용
  • 순서, 시간 관계없이 실행 가능
    • LifeCycle 이용하지 않고 실행가능한 테스트 환경 조성 필요
  • SRP 가 잘 지켜질 수 있도록 로직 작성

3️⃣ Repeatable → 반복 가능한 코드

  • 실행할 때마다 같은 결과
    • 언제나 같은 결과 멱등성을 보장해야 함.
  • 직접 통제할 수 없는 항목과 분리
    • 외부 환경 (DB, 네트워크, 사용자 입력)
    • 무작위값 (랜덤값, 날짜)
  • 해결법
    • mock 객체 사용
    • 테스트 대상 코드만 남기고 나머지는 테스트에서 배제할 수 있도록 하는 모든 방법 유효
    • 테스트할 대상에 통제할 수 있는 값을 파라미터로 넣도록 구조 변경

4️⃣ Self-Validating → 자가검증 테스트

  • 테스트에 필요한 설정은 모두 자동화
    • 외부설정이 필요하다면 독립성 위반한 것
  • 테스트 실행 시점 (순서, 시간) 자동화
    • 젠킨스, 팀시티 같은 CI 도구 사용
  • 테스트 기대값이 명확
    • 언제나 같은 결과 + 언제가 같은 기댓값

5️⃣ Timely: 적시 사용 테스트

  • 단위테스트 작성을 미룰 수록
    • 결함 늘어남
    • 구조 복잡
    • 테스트 비용 증가
profile
개발하고 말테야

0개의 댓글