9장: 단위 테스트
⌜단위 테스트⌟ - 블라디미르 코리코프
- 단위 테스트의 구조
- 준비-실행-검증
- 실행 구절은 한 줄을 넘기면 안 됨, 넘어가면 API의 캡슐화가 지켜지지 않은 것
- 검증 구절(Assert)은 한 테스트에서 여러 가지를 검증해도 되지만 너무 커지는 것은 지양해야 함
- 좋은 단위 테스트의 요소
- 리팩토링 내성: 테스트를 실패로 바꾸지 않고 애플리케이션 코드를 리팩토링할 수 있는지 여부
- 테스트는 코드에 유연성, 유지보수성, 재사용성을 제공한다.
- 테스트 코드를 깨끗하게 유지하면 실제 코드도 지속적으로 깨끗하게 유지할 수 있음
깨끗한 테스트 코드
깨끗한 테스트 코드를 만들려면 가독성이 필요하다.
Build-Operate-Check 패턴
- 각 테스트 구조를 명확히 세 부분으로 나눔
도메인 특화 언어(DSL)
- 시스템 조작 API 대신 테스트 코드에서 사용하는 특수 API를 작성 → 모킹?
- 테스트 API에 적용되는 표준은 실제 코드에 적용되는 표준과 다를 수 있음
깨끗한 단위 테스트 원칙 - FIRST
- Fast: 테스트는 빠르게 돌아야 함
- Independent: 각 테스트는 서로 독립적으로 수행되어야 함
- Repeatable: 어떤 환경에서도 반복 가능해야 함
- Self-Validating: 테스트는 불린값으로 결과를 내야 함(성공/실패)
- Timely: 테스트는 테스트하려는 코드를 구현하기 직전에 구현해야 함
10장: 클래스
- 클래스 작성을 위한 표준 자바 관례
- 변수 목록
- 정적 공개 변수
- 정적 비공개 변수
- 비공개 인스턴스 변수
- 공개 함수
- 공개 함수에서 호출하는 비공개 함수
- 변수 목록
- 다른 대안이 없을 때 테스트 코드에서 접근을 허용하기 위해 protected 사용
클래스의 크기
책임
- 클래스는 if, and, or, but을 사용하지 않고 설명할 수 있어야 함
- SRP: 클래스는 하나의 책임만을 가져야 함
- 클래스는 변경할 이유가 하나뿐이어야 함
응집도
- 높은 응집도를 위한 법칙
- 인스턴스 변수 개수는 적어야 함
- 각 클래스 메서드는 클래스 인스턴스 변수를 하나 이상 사용해야 함
- 메서드가 변수를 많이 사용할수록 응집도가 높음
- 모든 인스턴스 변수를 메서드마다 사용하는 클래스가 응집도가 가장 높음
- 응집도가 높으면 클래스에 속하는 메서드와 변수가 서로 의존하며 논리적 단위로 묶임
- 응집도를 유지하면 클래스 분리 가능
- 큰 함수 분리 → 인수를 전달하는 대신 사용되는 변수를 클래스 인스턴스 변수로 승격 → 메서드별로 사용하는 클래스 인스턴스 변수가 달라지므로 응집도가 낮아짐 → 사용하는 메서드와 변수를 묶어 여러 클래스로 분리
결합도
- 시스템 요소끼리 격리되도록 하면 결합도가 낮아짐
- 변경에 의한 클래스 범위가 최소화
- 테스트하기 수월해짐
- 유연성, 재사용성 증가
- DIP를 따를 수 있음: 클래스는 구현이 아니라 추상화에 의존해야 함
'공부 > 스터디' 카테고리의 다른 글
| [클린 코드] 5주차: 11, 13장 (2) | 2025.06.06 |
|---|---|
| [클린 코드] 3주차: 7, 8장 (0) | 2025.05.29 |
| [클린 코드] 2주차: 5, 6장 (1) | 2025.05.16 |
| [클린 코드] 1주차: 3장 (0) | 2025.05.10 |