>Java >java지도 시간 >단일 정적 메소드를 모의하고 PowerMockito를 사용하여 객체를 반환하는 방법은 무엇입니까?

단일 정적 메소드를 모의하고 PowerMockito를 사용하여 객체를 반환하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-27 16:52:12602검색

How to Mock a Single Static Method and Return an Object Using PowerMockito?

PowerMockito를 사용하여 단일 정적 메서드 모의 및 객체 반환

이 시나리오에서는 다음에서 정적 메서드 m1을 모의하는 것을 목표로 합니다. 두 개의 정적 메서드 m1과 m2를 포함하는 클래스입니다. 목표는 m1이 호출될 때 객체를 반환하는 것입니다.

이를 달성하기 위해 처음에는 m1에 대한 반환 값을 설정하기 위해 사용자 정의 Answer와 함께 PowerMockito.mockStatic을 사용하려고 시도했습니다. 그러나 이 접근 방식은 반환 유형이 다른 m1과 m2를 모두 호출했기 때문에 유형 불일치 오류가 발생했습니다.

또한 PowerMockito.when을 사용하여 m1에 대한 반환 값을 직접 지정하려고 시도했습니다. 그러나 이는 이후에 m1이 호출될 때 적용되지 않았습니다.

올바른 전략은 mockStatic의 1-인수 버전을 모두 활용하여 정적 모의를 활성화하고 when-thenReturn 구문을 사용하여 반환 값을 지정하는 것입니다. 타겟 방법. 방법은 다음과 같습니다.

import static org.mockito.Mockito.*;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

class ClassWithStatics {
  public static String getString() {
    return "String";
  }

  public static int getInt() {
    return 1;
  }
}

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithStatics.class)
public class StubJustOneStatic {
  @Test
  public void test() {
    PowerMockito.mockStatic(ClassWithStatics.class);

    when(ClassWithStatics.getString()).thenReturn("Hello!");

    System.out.println("String: " + ClassWithStatics.getString());
    System.out.println("Int: " + ClassWithStatics.getInt());
  }
}

이 예에서 ClassWithStatics에는 getString 및 getInt라는 두 가지 정적 메소드가 포함되어 있습니다. 테스트 클래스인 StubJustOneStatic은 PowerMockito를 사용하여 ClassWithStatics에 대한 정적 모의를 활성화한 다음 getString의 반환 값을 "Hello!"로 스텁합니다. when-thenReturn을 사용합니다. getInt의 기본 동작은 유지되므로 계속해서 1을 반환합니다.

위 내용은 단일 정적 메소드를 모의하고 PowerMockito를 사용하여 객체를 반환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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