>  기사  >  Java  >  PowerMock을 사용하여 Java에서 개인 메소드를 모의하는 방법은 무엇입니까?

PowerMock을 사용하여 Java에서 개인 메소드를 모의하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-04 08:14:01462검색

How to Mock Private Methods in Java with PowerMock?

PowerMock으로 Private 메소드 테스트

소프트웨어 개발 중에는 Private에 의존하는 공개 메소드를 테스트해야 하는 상황이 불가피하게 발생합니다. 것들. 이러한 경우 프라이빗 메서드의 올바른 기능을 가정하면 테스트 프로세스가 단순화될 수 있습니다. PowerMock은 테스트 목적으로 프라이빗 메서드를 모의하는 메커니즘을 제공하는 Java 테스트 프레임워크입니다.

PowerMock을 사용하여 프라이빗 메서드 모의

PowerMock을 사용하여 프라이빗 메서드를 모의하려면 다음을 따르세요. 단계:

  1. 클래스 스파이: 모의하려는 비공개 메서드가 포함된 클래스의 스파이 인스턴스를 만듭니다. 이는 PowerMockito.spy() 메소드를 사용하여 달성할 수 있습니다.
  2. 예상 메소드 동작 지정: when() 메소드를 활용하여 프라이빗 메소드의 예상 동작을 정의합니다. 여기에는 인수 및 반환 값 지정이 포함됩니다. anyString() 및 anyInt()와 같은 메서드 일치자를 사용하여 다양한 값을 처리합니다.
  3. 테스트를 실행합니다. 개인 메서드를 호출하는 공용 메서드를 호출하고 예상되는 동작을 어설션합니다.

예:

개인 메서드(doTheGamble())를 호출하는 공용 메서드(meaningfulPublicApi())가 있는 다음 클래스를 고려하세요.

<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>

PowerMock을 사용하는 해당 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() throws Exception {
        CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod());

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

        spy.meaningfulPublicApi();
    }
}</code>

이 예에서:

  • @PrepareForTest 주석은 CodeWithPrivateMethod 클래스를 준비용으로 표시합니다. PowerMock을 사용하여 프라이빗 메서드를 수정합니다.
  • when() 메서드는 모든 입력 인수에 대해 doTheGamble() 메서드의 예상 반환 값을 정의합니다.
  • 테스트는 다음과 같은 경우 예외가 발생하는지 확인합니다. public 메소드가 실행됩니다.

이 간단한 예는 PowerMock을 사용하여 테스트하기 위해 Private 메소드를 모의하는 방법을 보여줍니다. 이 기술을 활용하면 공개 메서드의 논리를 효과적으로 격리 및 테스트하여 소프트웨어의 안정성을 보장할 수 있습니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.