작성한 코드가 의도한 대로 동작하고 수정과 배포 후에도 문제없이 돌아가게 하기 위해서는 여러가지 규칙과 방법들이 상황에 따라 다양하게 존재 한다. 테스트 코드를 작성하는 것은 프로그램이 의도한 대로 동작하게 하고 예상치 못한 변수를 줄일수 있도록 해준다.
테스트 코드를 작성하기 어렵게 여겨지는 점들이 있다. 예로 기획에 따라 코드는 계속 변경되고 발전하게 된다. 테스트 코드 역시 동일하게 변경되고 발전 해야 하는데 상황에 따라 다르겠지만 테스트 코드에 설정한 조건들을 모두 변경해야 하거나, 하나를 수정 했는데 연쇄적으로 문제 발생하는 등 곤란한 상황이 있을 수도 있을 수 있다는 것이다.
테스트 코드가 주는 장점과 단점을 잘 고려해서 적절한 사이즈와 형태로 테스트 계획하고 코드를 작성하다보면 처음부터 잘하진 못하겠지만 노하우가 쌓이고 나면 테스트 코드를 작성하지 않는 지금보다는 더 나은 결과물을 만들어 낼수 있을 것이라 본다.
E2E(End-toEnd), 통합(Itergration), 단위(Unit) 테스트 중에서 단위 테스트에 대해서 알아보자.
단위 테스트 (Unit-Test)
단위 테스트는 기능별 작은 단위로 나누어 테스트 하는 것을 의미한다. 예를 들어 상품을 주문하는 기능이 있다고 하자.
상품 요청, 준비, 제작, 완성 이렇게 네가지 단계가 있다면 단위테스트는 각각의 단계가 문제 없이 잘 이루어지는지 확인 한다고 볼수 있겠다.
이러한 기능을 테스트 하는 코드를 작성해 둔다면 단계별로 기능을 직접 점검 하는 시간을 아낄수 있겠다.
특징
테스트 실행 속도가 빠르다. 수천개의 단위 테스트를 진행한다 하여도 몇 초 안에 끝난다.
파일시스템, 데이터베이스와 같은 외부요인에 종속되지 않고 독립적으로 실행 될수 있다.
코드를 수정하지 않으면 변경하지 않으면 항상 동일한 결과를 반환 한다.
주의
하나의 기능에 하나의 시나리오만 테스트 해야한다.
모든 것을 검증 할 필요는 없다. 필요한 것만 검증 하자.
각 테스트는 상호 의존적이지 않고 독립적이여 한다.
외부 요인들에 영향을 미치지 않도록 대체 요소를 찾는다.
테스트 케이스의 이름과 의미는 명확고 일관성 있게 작성한다.
의존성이 낮은 요소부터 시작해서 확장해 나아가야 한다.
예외 사항을 검증 할때 try/catch를 사용하지 말고 JUNIT에서 제공하는 것을 사용한다.