✅ @InjectMocks란?

졸용·2025년 4월 20일

@InjectMocks란?

@InjectMocks
private UserService userService;

이건 테스트할 대상 클래스의 인스턴스를 생성하고, 그 안에 필요한 의존성(mock 객체들)을 자동으로 주입해주는 애노테이션이다.


🔧 예를 들어서 설명하면

@ExtendWith(MockitoExtension.class)
class UserServiceTest {

    @InjectMocks
    private UserService userService; // 테스트 대상

    @Mock
    private UserRepository userRepository; // 의존성

    @Mock
    private PasswordEncoder passwordEncoder; // 의존성
}

위 코드에서 @InjectMocks가 붙은 userService는,

  • 생성자 주입이라면 생성자에,
  • 필드 주입이라면 필드에,
  • 세터 주입이라면 세터에

각각 @Mock 객체들을 알아서 주입해준다.


📌 쉽게 말해...

"의존성 자동 주입해서 테스트 대상을 준비해주는 도우미"


🎯 언제 쓰면 좋을까?

  • 테스트할 대상 클래스(UserService 등)가 여러 의존성(Repository, Encoder 등)을 갖고 있을 때

  • 그 의존성들을 전부 @Mock 처리하고 자동으로 넣고 싶을 때


❓ 그럼 @Mock과의 차이는?

애노테이션역할
@Mock가짜 객체를 만든다 (의존성 대체용)
@InjectMocks테스트 대상 객체를 만들고, 거기에 @Mock 객체를 자동으로 주입한다

🧪 요약 그림

          [@InjectMocks]
         UserService userService
             |         |
        [@Mock]    [@Mock]
  userRepository  passwordEncoder

➡️ @InjectMocks가 위 두 @Mock 객체를 userService에 자동으로 넣어준다.


🧠 결론 요약

  • @InjectMocks테스트 대상 객체를 만들고

  • 그 안에 필요한 의존성들을 자동으로 주입해주는 Mockito 애노테이션이다.

  • @Mock과 함께 자주 사용되며, 단위 테스트 코드 깔끔하게 만드는 핵심 도구!

profile
꾸준한 공부만이 답이다

0개의 댓글