🔍 @ExtendWith(SpringExtension.class) vs @ExtendWith(MockitoExtension.class)
✅ 공통점
- 둘 다 JUnit 5에서 테스트 환경을 확장하기 위해 사용하는 어노테이션.
- 각각 다른 테스트 목적에 맞춰 사용됨.
✅ @ExtendWith(SpringExtension.class)
항목 설명
목적 |
Spring 테스트 환경 구성 |
용도 |
@Autowired, @MockBean, @SpringBootTest 등과 함께 사용 |
사용 예 |
통합 테스트, 웹 컨트롤러 테스트, JPA 테스트 등 |
특징 |
Spring 컨텍스트를 실제로 로딩함 |
@ExtendWith(SpringExtension.class)
@SpringBootTest
class MyServiceTest {
@Autowired
MyService myService;
}
✅ @ExtendWith(MockitoExtension.class)
항목 설명
목적 |
Mockito 기반 단위 테스트 환경 구성 |
용도 |
@Mock, @InjectMocks 어노테이션과 함께 사용 |
사용 예 |
Spring 없이 순수 Java 테스트 |
특징 |
Spring 컨텍스트를 로딩하지 않음 (빠름) |
@ExtendWith(MockitoExtension.class)
class MyServiceTest {
@Mock
MyRepository myRepository;
@InjectMocks
MyService myService;
}
❗️두 개를 함께 사용하는 경우
- 특별한 상황에서만 사용 (예: Spring 컨텍스트도 필요하고 일부만 Mockito로 mocking 하고 싶을 때)
- 일반적으로는 @MockBean을 사용해서 SpringExtension 하나만 써도 충분
@ExtendWith({SpringExtension.class, MockitoExtension.class})
class MyServiceTest {
@Mock
MyRepository mockRepository;
@Autowired
MyService myService;
}
🧠 정리
어노테이션 목적 사용 상황
@ExtendWith(SpringExtension.class) |
Spring 테스트 환경 설정 |
통합 테스트, @SpringBootTest, @WebMvcTest 등 |
@ExtendWith(MockitoExtension.class) |
Mockito 기반 단위 테스트 |
순수 단위 테스트, 빠른 테스트 작성 시 |