[java] Guice의 모의 객체(Mock Object) 생성과 사용

Guice는 의존성 주입(Dependency Injection) 프레임워크로서, 테스트 중에 모의 객체(Mock Object)를 생성하고 사용하는 기능을 제공합니다. 모의 객체는 실제 객체를 대체하여 테스트에 사용되며, 특정 상황을 시뮬레이션하거나 테스트의 일관성을 유지하는 데 도움이 됩니다.

모의 객체(Mock Object) 생성하기

Guice에서 모의 객체를 생성하기 위해서는 Guice의 MockitoExtension을 사용해야 합니다. 이를 위해 다음 의존성을 추가해야 합니다:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>2.23.4</version>
    <scope>test</scope>
</dependency>

MockitoExtension을 사용하려면 테스트 클래스에 @ExtendWith(MockitoExtension.class) 어노테이션을 추가해야 합니다. 예를 들어:

@ExtendWith(MockitoExtension.class)
public class MyTest {
    // ...
}

테스트 클래스에서 모의 객체를 생성할 때는 @Mock 어노테이션을 사용하여 필드를 선언해야 합니다. 예를 들어:

@ExtendWith(MockitoExtension.class)
public class MyTest {
    @Mock
    private MyService myService;

    // ...
}

모의 객체(Mock Object) 사용하기

모의 객체를 사용하여 테스트를 작성할 때는 @InjectMocks 어노테이션을 사용하여 테스트 대상 객체에 의존성을 주입해야 합니다. 예를 들어:

@ExtendWith(MockitoExtension.class)
public class MyTest {
    @Mock
    private MyService myService;

    @InjectMocks
    private MyController myController;

    // ...
}

위의 예시에서 myController 객체는 myService 객체에 의존하고 있습니다. @InjectMocks 어노테이션을 사용하면 myController 객체에 자동으로 myService 객체가 주입됩니다.

테스트 메소드에서 모의 객체를 사용할 때는 Mockito의 기능을 활용할 수 있습니다. 가장 일반적으로 사용되는 기능은 모의 객체의 특정 메소드 호출을 확인하는 것입니다. 예를 들어 myService 객체의 doSomething() 메소드가 호출되었는지를 확인하려면 다음과 같이 사용할 수 있습니다:

@Test
public void testSomething() {
    // ...
    verify(myService).doSomething();
    // ...
}

마무리

Guice는 테스트에서 모의 객체를 사용하여 일관성 있는 테스트를 작성하는 데 도움이 됩니다. 위의 예제 코드를 참고하여 Guice의 모의 객체 생성과 사용 방법을 익히고, 자신의 프로젝트에서 활용해 보세요. 추가적인 기능이나 세부 사항은 Mockito의 문서를 참고하시기 바랍니다.

References