[java] PowerMock에서의 인터페이스 구현체 모킹

PowerMock은 Java에서 유닛 테스트를 할 때 사용되는 강력한 도구입니다. PowerMock을 사용하면 인터페이스 구현체를 모킹하는 것도 가능합니다. 이번 포스트에서는 PowerMock을 사용하여 인터페이스 구현체를 모킹하는 방법에 대해 알아보겠습니다.

PowerMock 설정하기

먼저, PowerMock을 사용하기 위해 다음과 같이 의존성을 추가해야 합니다:

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-core</artifactId>
    <version>2.0.7</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito2</artifactId>
    <version>2.0.7</version>
    <scope>test</scope>
</dependency>

위의 의존성을 추가한 후, JUnit 테스트 클래스에 다음과 같이 @RunWith 어노테이션을 추가하여 PowerMock을 사용할 수 있도록 설정합니다:

@RunWith(PowerMockRunner.class)
@PrepareForTest({YourClass.class})
public class YourTestClass {
    // 테스트 코드 작성
}

인터페이스 구현체 모킹하기

이제 모킹할 인터페이스의 구현체를 생성하고 모킹할 준비가 되었습니다. 다음은 예제 코드입니다:

public interface SomeInterface {
    String getData();
}

public class SomeImplementation implements SomeInterface {
    @Override
    public String getData() {
        return "Real Data";
    }
}

위의 예제에서는 SomeInterface라는 인터페이스와 SomeImplementation이라는 구현체를 정의했습니다. 이제 PowerMock을 사용하여 SomeImplementation을 모킹해보겠습니다.

@RunWith(PowerMockRunner.class)
@PrepareForTest({YourClass.class})
public class YourTestClass {
    @Test
    public void testMockedImplementation() {
        SomeImplementation mockImplementation = PowerMockito.mock(SomeImplementation.class);
        PowerMockito.when(mockImplementation.getData()).thenReturn("Mocked Data");

        // 모킹된 구현체 사용
        String result = mockImplementation.getData();

        Assert.assertEquals("Mocked Data", result);
    }
}

위의 테스트 코드에서는 SomeImplementation의 인스턴스를 PowerMockito.mock() 메소드를 사용하여 모킹하고, PowerMockito.when().thenReturn() 메소드를 사용하여 메소드가 호출될 때 반환할 값을 지정합니다. 이렇게 하면 모킹된 구현체를 사용해 테스트할 수 있습니다.

결론

이번 포스트에서는 PowerMock을 사용하여 인터페이스 구현체를 모킹하는 방법에 대해 알아보았습니다. PowerMock은 유닛 테스트에서 필요한 모의 객체 생성과 메소드 호출을 자유롭게 제어할 수 있는 강력한 도구입니다. 인터페이스 구현체를 모킹할 때도 PowerMock을 사용하면 효과적으로 테스트할 수 있습니다.

참고 자료: