좋은코드 나쁜코드: 프로그래머의 코드 품질 개선법(PART III 단위 테스트)
CHAPTER 11 단위 테스트의 실제
좋은 단위 테스트의 특징
- 코드의 문제를 정확하게 감지한다
- 구현 세부 정보에 구애받지 않는다
- 실패는 잘 설명된다
- 테스트 코드가 이해하기 쉽다
- 테스트를 쉽고 빠르게 실행할 수 있다
11.1 기능뿐만 아니라 동작을 시험하라
- 함수당 하나의 테스트 케이스만 있으면 적절하지 않을 때가 많다
- 해결책
- 각 동작을 테스트하는 데 집중하라
- 모든 동작이 테스트되었는지 거듭 확인하라
- 오류 시나리오를 잊지 말라
- 각 동작을 테스트하는 데 집중하라
11.2 테스트만을 위해 퍼블릭으로 만들지 말라
- 프라이빗 함수를 테스트하는 것은 바람직하지 않을 때가 많다
- 해결책
- 퍼블릭 API를 통해 테스트하라
- 코드를 더 작은 단위로 분할하라
- 해결책
11.3 한 번에 하나의 동작만 테스트하라
- 여러 동작을 한꺼번에 테스트하면 테스트가 제대로 안 될 수 있다
- 해결책
- 각 동작은 자체 테스트 케이스에서 테스트 하라
- 매개변수를 사용한 테스트
- 해결책
11.4 공유 설정을 적절하게 사용하라
상태 공유 : 설정 코드가 beforeAll 블록에 추가 되면 모든 테스트 케이스 전에 한번 실행된다
설정 공유 : 설정 코드가 beforeEach 블록에 추가 되면 각 테스트 케이스가 실행전에 실행된다
- 상태 공유는 문제가 될 수 있다
- 해결책
- 상태를 공유하지 않거나 초기화하라
- 설정 공유는 문제가 될 수 있다
- 해결책
- 중요한 설정은 테스트 케이스 내에서 정의하라
- 설정 공유가 적절한 경우
11.5 적절한 어서션 확인자를 사용하라
- 부적합한 확인자는 테스트 실패를 잘 설명하지 못할 수 있다
- 해결책
- 적절한 확인자를 사용하라
11.6 테스트 용이성을 위해 의존성 주입을 사용하라
- 하드 코딩된 의존성은 테스트를 불가능하게 할 수 있다
- 해결책
- 의존성 주입을 사용하라
11.7 테스트에 대한 몇 가지 결론
- 통합테스트
- 종단 간 테스트
- 회귀 테스트
- 골든 테스트(특성화 테스트)
- 퍼즈 테스트