1. ホーム
  2. java

[解決済み] Mockitoです。モック・プライベート・フィールドの初期化

2022-06-04 08:56:10

質問

インラインで初期化されるフィールド変数をモック化する方法は?

class Test {
    private Person person = new Person();
    ...
    public void testMethod() {
        person.someMethod();
        ...
    }
}

ここでは、モックである person.someMethod() をテストしながら Test.testMethod() メソッドの初期化をモック化する必要があります。 person 変数をモックする必要があります。何か手がかりはありますか?

編集してください。 Personクラスを変更することはできません。

どのように解決するのですか?

ここに投稿するのを忘れていましたが、この問題の解決策をすでに見つけています。

@RunWith(PowerMockRunner.class)
@PrepareForTest({ Test.class })
public class SampleTest {

@Mock
Person person;

@Test
public void testPrintName() throws Exception {
    PowerMockito.whenNew(Person.class).withNoArguments().thenReturn(person);
    Test test= new Test();
    test.testMethod();
    }
}

このソリューションのキーポイントは

  1. PowerMockRunnerで自分のテストケースを実行する。 @RunWith(PowerMockRunner.class)

  2. Powermockに準備を指示する Test.class を用意するよう、Powermock に指示します。 @PrepareForTest({ Test.class })

  3. そして最後にPersonクラスのコンストラクタのモックを作成します。

    PowerMockito.mockStatic(Person.class); PowerMockito.whenNew(Person.class).withNoArguments().thenReturn(person);