단위 테스트를 구성하는 방법
테스트를 준비, 실행, 검증이라는 세 부분으로 나눌 수 있다,
- 준비(given) : 테스트 대상 시스템(sut, 테스트할 클래스를 의미한다)과 해당 의존성을 원하는 상태로 만든다.
- 실행(when) : sut에 준비된 의존성을 전달하고 메서드를 호출하며, 출력이 있으면 출력 값을 캡쳐한다.
- 검증(then) : 결과를 검증한다. 결과는 반환 값이나 sut와 협력자의 최종 상태, sut가 협력자에 호출한 메서드 등으로 표시될 수 있다.
- 협력자는 공유하거나 변경 가능한 의존성이다. 값이나 불변 객체는 협력자에 해당하지 않는다.
아래와 같은 안티패턴은 주의한다.
- 여러 개의 준비, 실행, 검증 구절 피하기
- 테스트 내 if 문 피하기 : 유지보수와 가독성이 어려워진다.
테스트 간 중복 코드 제거
- 준비 구절에서 작성하는 객체 생성 로직은 테스트 간에 반복되는 경향이 있다. 해당 로직을 팩토리 메서드로 추출하면, 테스트 간에 재사용이 가능하다. 이때, 테스트 간에 결합이 되지 않도록 주의한다.
- 데이터베이스와 작동하는 통합테스트와 같이, 테스트 전부 또는 대부분에 사용되는 로직을 abstract 클래스로 추출해서 재사용할 수 도 있다.
'테스트' 카테고리의 다른 글
단위 테스트의 세 가지 스타일 (0) | 2023.09.17 |
---|---|
테스트 대역(Test Double)이란? (0) | 2023.09.17 |
좋은 단위 테스트의 4대 요소 (0) | 2023.09.17 |
단위 테스트 vs 통합 테스트 vs E2E 테스트 (0) | 2023.09.16 |
테스트 코드를 작성해야 하는 이유 (0) | 2023.09.16 |