@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과 함께 자주 사용되며, 단위 테스트 코드 깔끔하게 만드는 핵심 도구!❗