ホームページ  >  記事  >  Java  >  PowerMockitoを使用して単一の静的メソッドをモックし、オブジェクトを返す方法は?

PowerMockitoを使用して単一の静的メソッドをモックし、オブジェクトを返す方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-27 16:52:12576ブラウズ

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

PowerMockito を使用して単一の静的メソッドをモックし、オブジェクトを返す

このシナリオでは、静的メソッド m1 をモックすることを目的としています。 2 つの静的メソッド m1 と m2 を含むクラス。目標は、呼び出されたときに m1 がオブジェクトを返すことです。

これを達成するために、最初は PowerMockito.mockStatic をカスタム Answer とともに使用して m1 の戻り値を設定しようとしました。ただし、このアプローチでは、戻り値の型が異なる m1 と m2 の両方を呼び出したため、型不一致エラーが発生しました。

また、PowerMockito.when を使用して m1 の戻り値を直接指定しようとしました。ただし、これは、後で m1 が呼び出されたときに有効になりませんでした。

正しい戦略は、引数 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 に 2 つの静的メソッド getString と getInt が含まれています。テスト クラス StubJustOneStatic は、PowerMockito を使用して ClassWithStatics の静的モックを有効にし、getString の戻り値を "Hello!" にスタブします。 when-thenReturn を使用します。 getInt のデフォルトの動作は保持されるため、引き続き 1 を返します。

以上がPowerMockitoを使用して単一の静的メソッドをモックし、オブジェクトを返す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。