반응형

가독성 높이는 습관 - 테스트 코드 (1)

 

 

일반적인 휴먼 드리븐 테스트

  • 1. 서버를 실행한다
  • 2. 테스트 할 API 요청 값을 만든다
  • 3. 해당 API를 요청한다
  • 4. 결과 값을 확인한다
  • 5. 결과 값의 상세 필드들이 올바른지 확인한다

 

 

테스트 코드를 작성해야 하는 이유

  • 테스트에 대한 시간 및 비용 감소 (휴먼 드리븐 테스트 노가다 해방)
  • 테스트 코드를 통한 빠른 피드백, 빠른 검증
  • 실제 실행하기 전에 버그 발견 가능
  • (검증으로 인한) 안정성 확보 → 비교적 안전한 리팩터링 가능
  • (비용 감소로 인하여) 장기적으로는 더 빠른 코드 작성 가능 

 

 

테스트 종류

  • Unit test
  • Integration test
  • E2E test

 

 

Unit Test (단위 테스트)

INPUT x →

 FUNCTION f: 

→ OUTPUT f(x)

 

 

Unit test : F.I.R.S.T 속성

  • Fast : 유닛 테스트는 빨라야함
  • Isolated : 다른 테스트에 종속적인 테스트 금지
  • Repeatable : 매번 같은 결과를 만들어야함
  • Self-validating : 테스트는 스스로 결과를 검증할 수 있어야함
  • Timely : 테스트는 적시에 작성해야함

 

 

Integration test (통합 테스트)

  • real + infra (+ mock)
  • unit test가 비지니스 로직의 flow에 대한 검증이라면,
  • integration test는 환경(library and/or framework)에 대한 검증

 

 

E2E test

  • 일반적으로 시스템 전체의 모든 것을 테스트
  • 대부분의 전체 시스템이 구축이 완료되고 배포도 문제없이 진행되었을 때,
  • 실제 유저 입장에서 시스템을 검증하는 단계로 UI부터 검증을 시작함

 

 

Test Pyramid

https://martinfowler.com/articles/practical-test-pyramid.html

 

The Practical Test Pyramid

Find out what kinds of automated tests you should implement for your application and learn by examples what these tests could look like.

martinfowler.com

 

 

Test anti pattern

https://dzone.com/articles/testing-iceberg

 

Testing Iceberg - DZone Performance

Anyone has searched for information about the subject will have come across the famous "Testing Pyramid" more than once.

dzone.com

 

 

현실세계에서 테스트 - 프로젝트 진행 중에 수행되는 테스트

  • 개발
  • 기획 QA
  • 개발망 QA
  • 베타망 QA
  • CBT
  • ...

프로젝트별로 단계가 추가 또는 축소될 수 있음

 

 

정리

  • manual test(휴먼 드리븐 테스트)는 안티 패턴(아이스크림 콘 패턴)
  • 테스트 코드는 테스트 시간을 줄여줌
  • 빠른 피드백으로 인해 조기에 잘못된 것을 발견할 수 있음
  • 리팩터링을 위한 최소한의 안전성을 확보
  • 유닛테스트는 FIRST 원칙을 지켜야함
  • 일반적으로 부트 컨테이너가 포함되면 통합테스트로 간주함
  • 전체 프로세스를 테스트한다면 E2E 테스트

 


반응형

+ Recent posts