블라디미르 코리코프 님의 "단위 테스트" 책을 정리한 포스팅입니다.
1. '단위 테스트'의 정의
단위 테스트란
작은 코드 조각 단위로
빠르고 자동으로 실행
격리된 방식
격리
- 단위 테스트는 격리된 환경에서 실행되야 함
- 테스트는 순서에 의존하지 않아야 하며, 독립적으로 실행 가능한 상태여야 함
공유 의존성
- 테스트 간에 공유되고 서로의 결과에 영향을 미칠 수 있는 상태나 데이터
- 상태변경이 허용될 경우, 테스트 간 영향을 끼칠 수 있음
- 공유 의존성을 제거하거나, 모의 객체로 대체
- 정적 가변 필드 등
비공개 의존성
- 애플리케이션의 실행 흐름에서 보이지 않는 의존성
- 메모리 기반의 프록시로 대체
- 데이터베이스 연결, 시스템 접근 등
프로세스 의존성
- 애플리케이션 실행 프로세스 외부에서 실행되는 의존성
- 의존성을 대체할 Mock 시스템 사용
- 메시지 큐, 백그라운드 작업자 등
Mock
@Test
public void testAdd() {
// Mock 객체 생성
ResultRepository mockRepository = Mockito.mock(ResultRepository.class);
// 테스트 대상 클래스 생성 (Mock 주입)
CalculatorService service = new CalculatorService(mockRepository);
// 테스트 실행
int result = service.add(5, 3);
// 결과 검증
assertEquals(8, result);
// Mock 객체의 동작 검증
verify(mockRepository).saveResult(8); // saveResult(8)가 호출되었는지 확인
}
- 테스트 대역의 부분 집합
- 실제 상태와 관계없이 테스트가 요구하는 방식으로 요청에 응답
- 해당 의존성을 구현하기 위해서는 인터페이스가 필요
'Code' 카테고리의 다른 글
[단위 테스트] 2-2. 단위 테스트란 무엇인가: 런던파와 고전파 (1) | 2025.01.07 |
---|---|
[단위 테스트] 1-2. 단위 테스트의 목표: 커버리지 지표 (0) | 2025.01.06 |
[단위 테스트] 1-1. 단위 테스트의 목표: 단위 테스트 목표 (0) | 2025.01.06 |
[ 리팩토링 by 마틴 파울러 ] Chapter12. 상속 다루기 (0) | 2021.07.22 |
[ 리팩토링 by 마틴 파울러 ] Chapter11. API 리팩토링 (0) | 2021.07.22 |