단위 테스트 작성 원칙 정리
1. AAA 패턴을 따르자 (Arrange → Act → Assert)
- 테스트는 다음 3가지 구절로 구성되어야 합니다:
- cpp 복사편집 // arrange - 준비 // act - 실행 // assert - 검증
- 각 구절은 하나씩만 존재하도록 한다.
- 여러 개의 실행/검증이 있다면 → 테스트를 분리한다.
2. 실행 구절이 2줄 이상이라면?
- 테스트 대상 API(SUT)의 캡슐화가 부족할 가능성이 있다.
- 항상 함께 호출해야 하는 API 조합은 불변성 위반 가능성이 높다.
- 캡슐화를 통해 불변성을 내부에서 보장하도록 리팩토링하자.
3. 테스트 대상 객체는 sut로 명명하자
- 테스트에서 검증 대상 객체는 항상 sut로 명명해서 가독성과 의도를 명확히 한다
InfoBoardService sut = new InfoBoardService(...);
4. 테스트 픽스처는 팩토리 메서드로 분리하자
- 테스트 클래스의 생성자에 픽스처 코드를 넣지 말고,
- 아래처럼 정적 팩토리 메서드로 분리해 재사용성과 가독성을 높인다.
- private static Customer createSampleCustomer() { return new Customer("홍길동", "hong@example.com"); }
private static Customer createSampleCustomer() { return new Customer("홍길동", "hong@example.com"); }
5. 테스트 이름은 시나리오처럼 자연스럽게 작성
- 테스트 명명에 엄격한 규칙 적용은 ❌
- 비개발자도 이해할 수 있는 문장 형태로 테스트 이름을 작성
- 테스트 대상 메서드명을 굳이 포함할 필요 없음
- 단어는 언더스코어(_)로 구분
로그인되지_않은_사용자가_접근하면_403_오류를_반환한다()
6. 매개변수화된 테스트로 유사 테스트를 압축하자
- 반복되는 유사 테스트는 @ParameterizedTest로 압축할 수 있음
- 단점: 테스트 이름 표현이 어려움 → @DisplayName 또는 @CsvSource(name=...) 사용
@ParameterizedTest(name = "{0}은 짝수인가? {1}")
@CsvSource({"2,true", "3,false", "4,true"})
void 숫자의_짝수_여부를_검사한다(int number, boolean isEven) {
assertThat(number % 2 == 0)
.isEqualTo(isEven);
}
7. 검증문은 쉽게 읽히도록 구성하자
- AssertJ 등의 라이브러리를 활용하면, 자연어처럼 읽히는 문장으로 검증 가능
- 테스트 가독성을 비약적으로 향상시킴
assertThat(actual).isEqualTo(expected); assertThat(user.isAuthenticated()).isFalse();
보완 팁: 테스트의 3대 속성
- 신뢰성: 테스트는 항상 같은 결과를 내야 한다 (플레이크 테스트 X)
- 독립성: 테스트 간 상태가 서로 영향을 미치면 안 됨
- 빠름: 단위 테스트는 수 밀리초 내에 실행 완료되어야 함
최종 요약표
원칙 요약 설명
| AAA 패턴 | Arrange → Act → Assert 구분, 구절당 1번만 |
| 실행이 2줄 이상 | API 캡슐화 부족 → 리팩토링 필요 |
| SUT 명명 | 테스트 대상은 항상 sut 로 명시 |
| 픽스처 초기화 | 팩토리 메서드로 분리해 재사용 |
| 테스트 명명 | 시나리오 기반 자연어 스타일, 언더스코어 사용 |
| 파라미터화된 테스트 | 반복 테스트 압축, 이름은 명확히 |
| 검증문 구성 | AssertJ 등으로 자연스럽게 표현 |
| 테스트 속성 | 빠르고, 독립적이며, 신뢰성 확보 |
'기타' 카테고리의 다른 글
| [단위 테스트] 원칙과 패턴 (7장) - 단위테스트를 위한 리팩터링 (0) | 2025.04.18 |
|---|---|
| [단위 테스트] 원칙과 패턴 (6장) - 단위 테스트 스타일 (0) | 2025.04.17 |
| [단위 테스트] 원칙과 패턴 (5장) - 목과 테스트 취약성 (0) | 2025.04.16 |
| [단위 테스트] 원칙과 패턴 (4장) - 좋은 단위 테스트의 4대 요소 (0) | 2025.04.15 |
| [단위 테스트] 원칙과 패턴 (1장 , 2장) - 목표 및 정의 (0) | 2025.04.14 |
