UnitTesting 02 단위테스트란 무엇인가
02 단위테스트란 무엇인가
단위테스트의 정의
- 작은 코드조각을 검증하고, 빠르게 수행하고, 격리된 방식으로 처리하는 자동화된 테스트
- 고전적 접근법(Detroit) TDD
- 작은 코드조각 ? 일반적으로 한번에 한 클래스를 테스트하는 지침을 따르려고 노력해야한다.
- 격리된 방식 ? stateless, 테스트들이 순서에 의존되지않고 , 동시에 실행가능해야함.
- 격리를 위해 테스트대역을 사용할 수 있지만 보통 테스트간에 공유상태를 일으키는 의존성에 대해서만 사용한다.
- 공유 의존성을 대체하면 테스트 실행속도가 빨라진다.
- 런던파 (Mock 추종자 mockist)
- 하나의 클래스가 다른 클래스 또는 여러 클래스에 의존하면 이 모든 의존성을 테스트 대역(test double)로 대체해야한다.
- 테스트가 실패하면 어디가 고장났는지 확실히 알 수 있다.
- object graph를 분할할 수 있다. 그래프가 커져도 테스트하기 쉽다.
- test double 없이는 어렵다.
- 런던스타일은 테스트가 구현에 더 자주 결합되는 편이다. mock을 전반적으로 아무데나 쓰는것에 대해 주로 이의가 제기된다.
\ |
격리 주체 |
단위의 크기 |
테스트 대역 사용 대상 |
런던파 |
단위 |
단일 클래스 |
불변 의존성 외 모든 의존성 |
고전파 |
단위 테스트 |
단일 클래스 또는 클래스 세트 |
공유 의존성 |
- 둘 이상의 동작단위를 검증할때의 테스트는 통합테스트이다. 종종 test suite의 실행 속도를 최적화하려는 노력의 결과이다.
- endtoend 테스트는 일반적으로 통합테스트보다 의존성을 더 많이 포함한다. (ex, gateway)
- e2e는 유지보스측면에서 가장 비용이 많이 들기때문에, 모든 단위테스트와 통합테스트를 통과한 후 빌드 프로세스 후반에 실행하는것이 좋다.