0

問題:PowerMockito.doNothing()を実行しようとすると、Nullpointer例外がスローされます。

プライベートメソッドの値を返し、別のプライベートセッターメソッドに対して何もしないpartialMockObjectクラスを作成する必要があります。

doNothing()をsupress()に置き換えると機能させることができますが、これを理解したいと思います。

コード:

@Test
public void testPowerMockito() throws Exception
{       

    final String methodName1 = "Method1";
    final String methodName2 = "Method2";

    //Using PowerMockito
    ObjectToTest partialMockObject = PowerMockito.spy(new ObjectToTest());

    //Mock the private method, expect that a false
    PowerMockito.doReturn(false).when( partialMockObject,methodName1 );

    //Do Nothing on the void private setter     
    PowerMockito.doNothing().when( ObjectToTest.class,methodName2 );

    String result = partialMockObject.methodToTest();

    assertEquals("Fail","",result);

    //Confirms that the private method was called
    PowerMockito.verifyPrivate(partialMockObject).invoke(methodName1);
    PowerMockito.verifyPrivate(partialMockObject).invoke(methodName1);

}

StackTrace:'java.lang.NullPointerException at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.addAnswersForStubbing(PowerMockitoStubberImpl.java:68)at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl java:43)org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl.java:104)

4

1 に答える 1

1

私はPowerMockitoを広範囲に使用して、トリッキーなレガシーJavaコードで単体テストを作成しようとしました。私が言える最善のことは、あなたがうまくいくと思うすべてがうまくいくわけではなく、オンラインの例は年齢と質が混在しているということです。スパイはverifyPrivateを実行するために機能しますが、PowerMockitoを使用してプライベートメソッド呼び出しをモックすることはほとんど成功していません。

いくつかの可能な動きがあります:プライベートメソッドを保護する(そして、ここでやりたいことを行うためにMockito部分モックを使用することができます)、またはこれらのプライベートメソッドを持たないようにコードをリファクタリングして@他のオブジェクトをモックして、パブリックコールを完全にモック制御します。もちろん、あなたが他にどのような制約の下で働いているのか私にはわかりません。

于 2012-01-13T16:40:15.757 に答える