TIL.Unit Test
Unit Test
- 유닛 테스트란, 내가 작성한 코드의 가장 작은 단위인 함수를 테스트하는 메소드이다. 그래서 내가 작성한 로직 을 테스트하는 유닛테스트 코드를 짜서 테스트하게 된다
- 프론트의 경우 버튼을 추가해서 이벤트를 처리하는 신규 로직을 구현랑 때마다 크롬 브라우저를 띄워서 테스트하고 이전 기능 또한 테스트 해야 하기 때문에 시간이 많이 소요될 수 있다.
- 백엔드의 경우 테스트할 엔드포인트가 10개라면 이것을 httpie 나 포스트맨으로 테스트하면 최소 수분은 걸릴 것이고 엔드포인트 10개를 테스트 하는 유닛테스트를 돌린다면 수초만에 테스트가 끝날 것이다. 또한, integration 테스트는 데이터베이스 서버를 돌려야 하고 메모리가 유닛테스트보다 더 많이 사용하게 되므로 비용도 비싸다.
- 이처럼 유닛 테스트는 빠르고 비용이 싸므로 개발할때 필수적으로 작성해야 한다
Testing Pyramid
- Google Test Automation Conference에서 제안된 테스트 피라미드
- 시스템을 테스트 할때 크게 3가지 방법으로 나눌수 있다.
-
전체 테스트 비중을 아래와 같은 수치로 구현하는것이 권장된다.
E2E(UI) Testing
- 10%Integration Testing
- 20%Unit Testing
-70%
✅ End-To-End Testing / UI Testing
- 크롬을 띄운 다음에 내가 만든 검색페이지로 들어가서 검색을 해보고 검색한 내용이 제대로 나오는지 화면상에서 확인하거나 직접 회원가입을 해보고 회원가입 후에 로그인 되는지 직접 브라우저 상에서 값을 입력해서 테스트하는 방법
- 자동화 할 수 있지만 UI Testing은 자동화 하기가 가장 까다롭고 또 실행하기도 까다롭다.
- Manual Testing은 실행하기 쉽다는 장점이 있지만 비용이 많이 들고 부정확하며 실행 시간이 오래걸린다.
✅ Integration Testing
- 최소 두개이상의 클래스 또는 서브 시스템의 결합을 테스트하는 방법
- 예를들면 장고로 서버를 띄우고 모델 클래스와 결합하여 데이터베이스 시스템과 연동한 테스트
- Postman 또는 httpie로 호출해서 Json response가 제대로 출력되는 확인
✅ Unit Testing
- 가장 쉬우며 효과가 좋다! 끝!
Unit Test 장점
- 유닛 테스트는 UI Test또는 integration Test보다 테스트 비용이 싸다고 할수 있다. 왜냐하면 UI Test는 백엔드 서버와 프론트를 연동하여 사람이 직접 테스트하지만, 유닛 테스트는 사람이 스크립트로 한꺼번에 자동으로 실행하기 때문이다.
- 또한, 유닛 테스트는 다른 테스트에 비해서 실행속도가 매우빠르다. 그래서 유닛테스트를 활용하면 하루에도 배포를 여러번 할 수 있어 개발 및 배포 속도에 중요한 영향을 주기 떄문에 개발할 때 최대한 활용하는게 좋다.
- 유닛테스트를 잘 짜놓으면 유닛테스트가 되었던 코드에서는 버그가 거의 발견되지 않고 대부분 버그가 발견되는 경우는 유닛테스트가 없어서 발생하는 경우가 많고 만약 사후에 발견된 버그에 대해서도 버그를 수정한 후 유닛테스트를 작성해놓으면 버그를 방지할 수 있다.