✅ @AutoConfigureMockMvc
- 컨트롤러를 포함한 전체 동작을 통합적으로 테스트할 때 사용
- 보통 특정 컨트롤러 테스트할때 사용하는 것 같지만, 서비스 리포 테스트(= 통합 테스트) 도 가능하다는말
- @SpringBootTest가 존재해야 사용 가능
- 테스트에 필요한 의존성 제공
- @Autowired 허용하여, 객체 의존성 주입
📦 특징
- 실제 Spring 빈들이 다 로딩됨 (DB까지 연결되면 진짜로 저장도 함)
- 실제 HTTP 요청처럼 컨트롤러, 서비스, 리포지토리 흐름을 전부 테스트함
- 무겁지만 실환경과 유사한 테스트 가능
✅ @ExtendWith(MockitoExtension.class)
- JUnit과 Spring Framework을 연결하는 역할
- 서비스, 유틸 등 Spring 없이 빠르게 단위 테스트할 때 사용된다.
- 스프링 부트 애플리케이션 전체 또는 특정 레이어(예: 서비스, 레포지토리)를 대상으로 테스트할때 유용
📦 특징
- Spring 실행 없이 new 없이도 @Mock, @InjectMocks로 객체 구성 가능
- 보통 로직만 검증하고 싶은 서비스 단위 테스트에 적합
- 테스트 빠르고 가벼움
💡 예시코드
@ExtendWith(MockitoExtension.class)
class BookServiceTest {
@Mock
private BookRepository bookRepository;
@InjectMocks
private BookService bookService;
@Test
void testLogic() {
// 단위 테스트 로직
}
}
📌 @InjectMocks
실제로 테스트할 객체를 말한다. (ex. BookService)
@InjectMocks
private BookService bookService;
@Mock
private UserService userService;
@Mock
private TokenService tokenService;
@Mock
private MainCategoryRepository mainCategoryRepository;
📌@Mock
의존성을 가짜로 주입할때 사용한다.
@Mock
private UserService userService;
@Mock
private TokenService tokenService;
@Mock
private MainCategoryRepository mainCategoryRepository;
🔁 같이 사용가능한가 ?
❌ 같이 쓰기 절대 불가능 ❌
- @ExtendWith(MockitoExtension.class)는 Spring 컨텍스트 없이 단위 테스트를 하기 위한 설정
- @SpringBootTest + @AutoConfigureMockMvc는 Spring을 실행하는 통합 테스트
→ 둘은 서로 다른 목적이라 병행 사용하지 않음.
'스프링 | 스프링 부트' 카테고리의 다른 글
[ Spring ] JWT 개념과 기본 구현 (1) | 2025.07.25 |
---|---|
🔨 @Builder vs @SuperBuilder (0) | 2025.07.25 |
[ test ] : Test 코드 사용을 위한 기본 어노테이션 (1) | 2025.06.15 |
[ Spring ] : 스프링이란 ? (1) | 2025.06.13 |
[ Spring ] @Transactional 이란? (0) | 2025.04.02 |