@InjectMocks

마라탕천재 ㅣ 2024. 9. 12. 14:01

@InjectMocks는 Mockito에서 사용되는 어노테이션으로, 테스트 대상 클래스의 실제 인스턴스를 생성하고 그 클래스가 의존하는 객체들에 대해 @Mock으로 선언된 모의 객체들을 자동으로 주입해주는 역할을 한다.

 

@InjectMocks의 역할:

  • 테스트 대상 클래스의 실제 객체를 생성하고, 그 클래스가 의존하는 객체들을 모의(Mock) 객체로 주입한다.
  • 생성자, 필드, 또는 setter 메서드를 통해 모의 객체를 자동으로 주입한다.

 

 

사용하는 이유:

테스트하려는 클래스가 다른 객체들에 의존할 때, 실제 객체 대신 모의 객체를 주입하여 테스트 대상 클래스만을 독립적으로 테스트할 수 있게 한다. 이를 통해 외부 의존성에 영향을 받지 않고 해당 클래스의 로직을 검증할 수 있다.

 

 

동작 방식:

  1. @Mock으로 선언된 객체들이 모의 객체로 생성된다.
  2. @InjectMocks가 붙은 클래스는 실제 객체로 생성된다.
  3. 이 클래스가 의존하는 객체들은 @Mock으로 선언된 모의 객체들이 자동으로 주입된다.

 

 

예시코드

@ExtendWith(MockitoExtension.class)
class SomeServiceTest {

    @Mock
    private SomeDependency someDependency;  // 모의 객체로 생성됨

    @InjectMocks
    private SomeService someService;  // 실제 객체, 모의 객체가 주입됨

    @Test
    void someTest() {
        // 테스트 로직
    }
}

SomeService 클래스는 SomeDependency를 의존하고 있는데, @InjectMocks는 SomeService 객체를 생성하면서 그 내부의 의존성인 SomeDependency에 대해 @Mock으로 선언된 모의 객체를 자동으로 주입한다. 이를 통해 SomeService의 독립적인 테스트가 가능해진다.

따라서, @InjectMocks는 객체 간의 의존성을 해결해주며, 테스트에서 외부 의존성 없이 단위 테스트를 수행할 수 있도록 해주는 중요한 역할을 한다.