•
단위 테스트란 기본적으로 개인적인 단위의 코드가 적절한지 테스트하는 것이다.
•
고정된 입력값을 제공했을 때, 해당 입력값에 대한 기대되는 출력값을 출력하는 것이다.
◦
여기서 출력은 다양하다. 상태일수도 있고 반환값일수도 있고 만약 협력자를 사용한다면 협력자와의 협력 내용을 검증할 수도 있다.
▪
후술될수록 좋지 않은 검증법이다..
장점
•
테스트를 자동화할 수 있다.
◦
즉 내가 일일이 값 넣고 로그 찍어서 확인하지 않아도 된다.
•
더 나은 코드 설계를 가능케 해준다.
◦
테스트하기 힘든 구조는 결합도가 높은 코드임을 의미한다.
•
적은 버그와 높은 가독성을 확보할 수 있게 해준다.
◦
설계의 변경으로 인한 이점이다. 프로그램의 신뢰성이 향상되고 단위로 잘게 쪼개지므로 코드 이해가 쉬워진다.
•
코드 리팩토링 시 자신감을 심어준다.
◦
조심해야할 요소이기도 하다. 단위 테스트의 리팩토링 내성이 적절히 확보되지 않았다면 되려 리팩토링을 두렵게 만드는 존재가 된다.
•
CI/CD의 핵심요소이다.
◦
단위 테스트는 개발 과정에 포함되는 것이 좋다.
통합 테스트와의 관계
•
통합 테스트는
◦
다양한 요소들이 테스트 계획에 맞춰 잘 동작하는 지 테스트하는 것이다.
◦
예상한 대로 다양한 모듈들이 함께 잘 동작하는지 결정한다.
◦
통합 과정에서 문제가 생길 수 있는 요지들을 테스트한다.
◦
테스트 더블을 이용해서 테스트할 수 있다.
◦
외부 의존성까지 포함해서 테스트할 수 있다.
•
단위 테스트 책을 읽고나서는 생각이 바뀌었다.
◦
단위 테스트의 공통적인 정의인 1.특정 동작 단위를 검증하며 2.빠르게 수행되고 3.테스트 간 격리되어 실행된다
◦
위 세 항목을 모두 지키면 단위 테스트, 하나라도 지키지 않으면 통합 테스트다.
단위 테스트 프레임워크
•
JUnit
◦
테스트케이스 생성을 지원한다.
◦
테스트케이스가 성공했는지 실패했는지 체크하는 부분을 자동화해준다.
◦
테스트 설정을 위한 다양한 유틸리티를 제공한다.
•
ts-mockito
◦
테스트 더블(Mock, Stub)을 생성해준다.
◦
이를 통해 협력자에 대한 의존성을 최소화시켜준다.