도자기 장인들은 도기를 굽고 나서 마음에 들지않으면 바로 깨버리듯이, 우린 코드를 그렇게 다룰줄 알아야 하지만, 다시 처음 부터 시작하기란 쉽지 않은 일이기에 조금이라도 문제적인 점을 줄이기 위해서는 미리 테스트를 하여 문제가 되는 부분을 줄일수 있어야 한다.
소프트 웨어 테스팅이란?
테스트는 200ok는 떴지만 내부의 값이 다를 수 있다. 그럴 경우가 있기때문에 결과값과 테스트를 거쳐서 정확히 해봐야한다.
"did you build right product?"
Manual Testing을 한다면
그렇지만 한번은 꼭 하는 것이 좋다. 사람이 사용하기 때문에 필요는 한 부분이다.(하지만 이또한 시스템적으로 가능)
Automation Testing을 한다면
결국의 사람의 손을 이용해야하는 ux적 부분도 있지만 그 부분도 자동으로 할 수 있다.
단점: 코드를 치는 과정 속에서 자주 사용하면 안된다. ux적 관점에서 가장 끝부분에서 이루어져야 한다. 그전 더 많이 이루어 져야 하는 테스트는 Intergration 테스트다.
유닛 테스트란, 내가 작성한 코드의 가장 작은 단위인 함수를 테스트하는 메소드이다. 그래서 내가 작성한 로직을 테스트하는 유닛테스트 코드를 짜서 테스트하게 됩니다.
하나의 기능만 테스트 하는게 유닛 전체적인 연계된 기능 테스트 통합
독립된 테스트에서 파생될 수 있는 경우의 수를 테스트하는 것
로그인이나 회원가입시 키에러가 날 경우
테스트 파일 폴더를 들어가서 다양한 라이브러리 테스트를 의도한다고 하면 수천개의 코드가 테스트 시행
프론트는 크롬브라우저를 띄워서 실제로 동작시켜보는 E2E 테스트
백은 장고서버를 동작시키고 Httpie나 포스트맨으로 주로 intergration테스트를 수행
유닛테스트는 UI Test 또는 Integration Test 보다 테스트 비용이 비싸다고 할 수 있다. 왜냐하면 UI Test는 백엔드 서버와 프론트를 연동하여 사람이 직접 테스트 하지만, 유닛테스트는 사람이 스크립트로 한꺼번에 자동으로 실행하기 때문이다.
유닛 테스트는 다른 테스트에 비해서 실행속도가 매우빠르다. 그래서 활용하면서 하루에도 배포를 여러번 할 수 있어 개발 및 배포 속도에 중요한 영향을 주기 때문에 개발 할 때 최대한 활용 가능하다.
새로운 기능을 구현할 때 유닛 테스를 잘 작성해놓으면 중장기적으로 유지 보수가 쉬운 장점이 있다. 즉, 이전에 통과했던 테스트집합을 가지고 버그를 찾기 위해서 이전 테스트되었던 유닛테스트를 반복하는 것을 regression 테스트라고 하는데 유닛테스트만 반복하면 되기때문에 regression 테스트도 반복적으로 수행 할 수 있다.
잘 짜놓으면 버그가 잘 발견되지 않을것이고 발견되더라도 유닛테스트가 없어서 발생하는 경우가 많다. 그리고 만약 사후에 발견된 버그에 대해서도 버그를 수정한 후 유닛테스트를 작성해놓으면 버그를 방지 할 수 있다.