> Java > java지도 시간 > 본문

PowerMock 및 Mockito를 사용하여 테스트하기 위해 개인 메서드를 모의하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-04 04:21:29
원래의
1044명이 탐색했습니다.

How to Mock Private Methods for Testing with PowerMock and Mockito?

PowerMock을 사용하여 테스트하기 위해 비공개 메서드 모의하기

개인 메서드로 클래스를 테스트하는 것은 어려울 수 있으며, 특히 해당 메서드의 올바른 동작을 가정하려고 할 때 더욱 그렇습니다. . PowerMock은 이에 대한 솔루션을 제공하지만 일부 사용자의 경우 예상대로 작동하지 않을 수 있습니다. 여기서는 Mockito와 PowerMock의 조합을 사용하여 비공개 메서드를 성공적으로 모의하는 가능한 접근 방식을 살펴보겠습니다.

접근 방식:

우리가 사용할 기본 도구는 다음과 같습니다. Mockito의 when 메소드는 개인 메소드의 동작을 지정합니다. 개인 메소드에 액세스하기 위해 PowerMock의 Spy 기능을 활용하겠습니다. 이를 통해 개인 메소드에 대한 호출을 가로채고 그 동작을 모의할 수 있는 스파이 객체를 생성할 수 있습니다.

예:

다음 클래스 CodeWithPrivateMethod를 고려해보세요. 개인 메소드 doTheGamble이 있습니다.

<code class="java">public class CodeWithPrivateMethod {

    public void meaningfulPublicApi() {
        if (doTheGamble("Whatever", 1 << 3)) {
            throw new RuntimeException("boom");
        }
    }

    private boolean doTheGamble(String whatever, int binary) {
        Random random = new Random(System.nanoTime());
        boolean gamble = random.nextBoolean();
        return gamble;
    }
}</code>
로그인 후 복사

테스트:

설명된 접근 방식을 사용하여 개인 메소드를 모의하고 원하는 것을 주장하는 JUnit 테스트를 작성할 수 있습니다.

<code class="java">import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.powermock.api.mockito.PowerMockito.when;
import static org.powermock.api.support.membermodification.MemberMatcher.method;

@RunWith(PowerMockRunner.class)
@PrepareForTest(CodeWithPrivateMethod.class)
public class CodeWithPrivateMethodTest {

    @Test(expected = RuntimeException.class)
    public void when_gambling_is_true_then_always_explode() {
        CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod());

        when(spy, method(CodeWithPrivateMethod.class, "doTheGamble", String.class, int.class))
                .withArguments(anyString(), anyInt())
                .thenReturn(true);

        spy.meaningfulPublicApi();
    }
}</code>
로그인 후 복사

이 테스트에서는 스파이 개체 spy를 생성하고 when을 사용하여 doTheGamble 메서드를 모의합니다. 모든 입력에 대해 메서드가 항상 true를 반환하도록 지정합니다. 결과적으로,meaningfulPublicApi 메서드가 호출되면 테스트에서는 프라이빗 메서드의 모의 동작으로 인해 코드에서 RuntimeException이 발생할 것으로 예상합니다.

이 접근 방식은 모의를 위한 Mockito와 프라이빗 액세스를 위한 PowerMock의 강력한 기능을 결합합니다. 비공개 메소드에 의존하는 코드를 테스트하기 위한 완벽한 솔루션을 제공합니다.

위 내용은 PowerMock 및 Mockito를 사용하여 테스트하기 위해 개인 메서드를 모의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿