스프링

@ExtendWith(SpringExtension.class) vs @ExtendWith(MockitoExtension.class)

148june 2025. 4. 18. 20:06

🔍 @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 기반 단위 테스트 순수 단위 테스트, 빠른 테스트 작성 시

'스프링' 카테고리의 다른 글

HttpStatus란  (0) 2025.04.28
도커 설정  (0) 2025.04.22
프록시  (0) 2025.04.18
AOP  (0) 2025.04.17
HttpServletRequest  (0) 2025.04.17