TIL52 | Unit Test

2021. 11. 20. 20:07프로그래밍/웹관련

반응형

TODO

  • 면접에 자주 등장하는 TDD(Test Driven Development) 개념 찾아보고 장점, 단점 정리하기 (TDD를 실제 서비스 개발시 적용하기 어려운 이유)

 

1. Software Testing

사전에 문제가 생기지 않게 방지하는 것

 

테스트를 하는 이유

  • 결함 확인
  • 사전 방지
  • 시간 절약
  • 구조 개선
  • 품질 개선
  • 확장성

 

2. Manual Test vs Automation Testing

:: Manual Testing

사람이 직접 손으로 하는 것

단점

  • 불안정성 ⬆️

  • 인력소모 ⬆️

  • 비용 ⬆️

  • 테스트 실행 속도 ⬇️

:: Automation Testing

컴퓨터가 직접 하는 것

장점

  • 안정성 ⬆️

  • 인력소모 ⬇️

  • 비용 ⬇️

  • 테스트 실행 속도 ⬆️

  • 확장성 ⬆️

 

3. 시스템 테스트 전략 3가지

1. End-To-End Test

tools: cypress

  • 전체적인 Flow로 확인을 해야하는 테스트 (사람이 직접 눌러보는 것)

    • Ex. 브라우저 상 클릭 후 생기는 변화에 대한 검증
  • 누구나 테스트할 수 있다

 

2. Integration Test (통합 테스트)

tools: postman, httpie

  • 모듈 간의 호환성 검증

    • Ex. 웹 페이지 혹은 Postman을 통한 API 호출 시 올바르게 동작하는지 확인
  • 백엔드에서 테스트 해볼 수 있다

 

3. Unit Test

  • 독립적으로 진행되는 가장 작은 단위의 테스트
    • 하나의 기능 또는 메소드
  • 시스템을 테스트한다는 개념보다는 코드를 테스트하는 것

 

:: Unit Test 작성의 필요성

E2E Test와 Integration Test 단점

  • 실제로 돌아가는 환경이 구성되어야 테스트가 가능하다.

  • 서버가 돌아가야하고, DB가 구성이 되어있어야 한다.

 

Unit Test 장점

  • 빠른 문제 파악 가능
  • 시간과 비용 절감
  • 리팩토링 시 안정성 확보
  • 코드에 대한 문서로 활용 가능

 

:: 용어

- TestCase

unittest Framework의 테스트 조직의 기본 단위

- Fixture

테스트를 진행할 때 필요한 테스트용 데이터 혹은 설정 등을 이야기 한다. 주로 테스트가 실행되기 전이나 후에 생긴다.

- Assertion

unittest에서 테스트하는 부분이 제대로 됐는지를 확인하는 부분

:: 설계 원칙

  • 테스트 유닛은 각 기능의 가장 작은 단위에 집중해야한다.

  • 각 테스트 유닛은 반드시 독립적이어야 한다.

  • 테스트가 빠르게 돌 수 있도록 만들기 위해 노력해야한다.

    • 테스트를 매우 자주할 것이기 때문에 빨라야한다.
  • 지금 사용하고 있는 툴이 개별 테스트나 테스트 케이스를 어떻게 수행하는지 알아야한다.

  • 그날의 코딩을 시작하기 전에 항상 풀 테스트 슈트를 돌려야한다.

  • 모두가 공유하는 저장소에 코드를 집어넣기 전에 자동으로 모든 테스트를 수행하도록 하는 훅을 구현하는 것이 좋다. (CI/CD)

  • 코드를 디버깅할 때 가장 먼저 시작할 일은 버그를 집어내는 새로운 테스트를 작성하는 것이다.

  • 테스트 함수에는 길고 서술적인 이름을 사용해야 한다.

    • 개발자들이 테스트 코드를 공유하기 때문에 길고 디테일하게 쓰는 것이 좋다.
  • 테스트 코드의 또다른 사용 방법은 새로운 개발자들을 위한 안내서로 쓰는 방법이다.

    • 마치 Document처럼 사용하기도 한다.
반응형