Files
spring-boot-examples/docs/test/11_애너테이션.md
2025-04-08 19:56:24 +09:00

51 lines
4.8 KiB
Markdown

아래는 스프링 부트 테스트에서 자주 사용되는 애너테이션들을 **JUnit**, **Spring Test**, **Mockito**로 구분하고, 표 형식으로 정리한 내용입니다. 각 애너테이션의 역할과 설명을 간결하게 작성했습니다.
---
### JUnit 관련 애너테이션
| 애너테이션 | 설명 |
|-----------------------|----------------------------------------------------------------------|
| `@Test` | 테스트 메서드를 정의. 별도 설정 없이 실행 가능한 기본 단위 테스트. |
| `@BeforeEach` | 각 테스트 메서드 실행 전에 실행되는 설정 메서드를 지정. |
| `@AfterEach` | 각 테스트 메서드 실행 후에 실행되는 정리 메서드를 지정. |
| `@BeforeAll` | 모든 테스트 실행 전에 한 번 실행되는 클래스 수준 설정 메서드를 지정. (static 필요) |
| `@AfterAll` | 모든 테스트 실행 후에 한 번 실행되는 클래스 수준 정리 메서드를 지정. (static 필요) |
| `@Disabled` | 특정 테스트 메서드나 클래스를 비활성화하여 실행에서 제외. |
| `@DisplayName` | 테스트 메서드에 사용자 친화적인 이름을 지정해 가독성 향상. |
| `@ParameterizedTest` | 동일한 테스트를 여러 데이터로 반복 실행. (예: 값 소스와 함께 사용) |
| `@Nested` | 테스트 클래스 내에 계층적 구조를 만들어 관련 테스트를 그룹화. |
---
### Spring Test 관련 애너테이션
| 애너테이션 | 설명 |
|-------------------------|----------------------------------------------------------------------------------------|
| `@SpringBootTest` | 스프링 부트 애플리케이션 컨텍스트를 로드하여 통합 테스트를 실행. (webEnvironment 설정 가능) |
| `@WebMvcTest` | MVC 계층(컨트롤러)만 로드해 단위 테스트. 서비스나 리포지토리는 모킹 필요. |
| `@DataJpaTest` | JPA 관련 테스트를 위해 리포지토리와 데이터베이스 설정만 로드. (H2 기본 사용) |
| `@AutoConfigureMockMvc`| MockMvc를 자동 설정해 컨트롤러 테스트에 사용. |
| `@Transactional` | 테스트 메서드 실행 후 트랜잭션을 롤백하여 데이터베이스 상태를 초기화. |
| `@Rollback` | `@Transactional`과 함께 사용해 롤백 여부를 명시적으로 설정. (기본: true) |
| `@Testcontainers` | Testcontainers를 사용해 Docker 기반 데이터베이스 등을 테스트 환경에 통합. |
| `@DynamicPropertySource`| 테스트에서 동적으로 프로퍼티(예: 데이터베이스 URL)를 설정. (Testcontainers와 자주 사용) |
| `@AutoConfigureRestDocs`| 스프링 REST Docs를 자동 설정해 API 문서 생성을 지원. |
---
### Mockito 관련 애너테이션
| 애너테이션 | 설명 |
|------------------------|----------------------------------------------------------------------------------------|
| `@Mock` | 모킹된 가짜 객체를 생성. 외부 의존성을 대체할 때 사용. |
| `@InjectMocks` | 모킹된 객체를 실제 객체에 주입해 테스트 대상 객체를 초기화. |
| `@Spy` | 실제 객체를 감싸 일부 메서드만 모킹 가능. 전체 동작을 유지하면서 특정 동작만 변경. |
| `@MockBean` | 스프링 컨텍스트에 모킹된 빈을 등록. `@SpringBootTest``@WebMvcTest`에서 사용. |
| `@ExtendWith(MockitoExtension.class)` | JUnit 5와 Mockito를 통합해 `@Mock`, `@InjectMocks` 등을 활성화. |
---
### 추가 참고
- **JUnit**: 테스트 실행의 기본 프레임워크로, 단위 테스트와 통합 테스트 모두에서 사용됩니다.
- **Spring Test**: 스프링 부트의 컨텍스트와 통합된 테스트를 지원하며, 계층별 테스트에 특화된 애너테이션을 제공합니다.
- **Mockito**: 의존성을 모킹해 단위 테스트를 독립적으로 실행하거나, 통합 테스트에서 특정 빈을 대체하는 데 유용합니다.
이 표는 책의 **부록 A. 자주 사용하는 테스트 애너테이션 정리**에 포함시키기에 적합합니다. 필요하면 특정 애너테이션에 대한 예제나 더 자세한 설명을 추가할 수 있으니 말씀해 주세요!