2012-01-13 1 views
0

問題:PowerMockito.doNothing()を実行しようとするとNullpointer例外がスローされます。プライベートセッターのPowerMokito 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:org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.addAnswersForStubbingで 「 java.lang.NullPointerExceptionが (PowerMockitoStubberImpl.java:68) 組織でorg.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.whenで.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl.java:43) (PowerMockitoStubberImpl.java:104)

答えて

1

私はPowerMockitoを使って、複雑なレガシーJavaコードで単体テストを試してみました。私が言えることは、あなたがうまくいくと思うものすべてがうまくいくわけではなく、オンラインの例が年齢と質が混在しているということではありません。スパイはverifyPrivateを実行するために働いていますが、PowerMockitoを使用してプライベートメソッド呼び出しを模倣することはほとんど成功していません。

あなたはいくつかの動きがあります:プライベートメソッドを保護します(そしてここでやりたいことをするためにMockitoの部分的なモックを使うことができます)。あるいは、これらのプライベートメソッドを持たないようにコードをリファクタリングしますメソッドを呼び出すことができますし、@他のオブジェクトをモックすることができますので、公衆電話を完全に嘲笑制御します。私は他のどのような制約があなたのもとで働いているのか分かりません。

+0

入力いただきありがとうございます。ええ、私は最新バージョンのMockitoを疲れさせました。それは、ボイドであるときだけ、リターンでプライベートメソッドを嘲笑することには問題ありませんでした。しかし、suppress(Method)を使うとプライベートセッターメソッドを使うことができました。 – haju

関連する問題