2013-08-05 25 views
6

私が使用している静的メソッドの1つは、2つのことです。いくつかのデータを返しますが、渡された引数オブジェクトも変更します。この更新された引数オブジェクトは、後でコードで使用されます。doAnswer静的メソッド - PowerMock

PowerMockを使用して復帰動作を模擬しています。

入力引数を更新する2番目の部分を定義するには、doAnswerメソッドを定義していますが、機能していません。私がテストしようとしている方法は、このように見えます。

public void login() throws ConnectionException, AsyncApiException { 
    ConnectorConfig partnerConfig = new ConnectorConfig(); 

    //This call sets the value in one member variable 'serviceEndPoint in ParterConfig which is accessed later in this method only. 
    partnerConnection = Connector.newConnection(partnerConfig); 

    //partnerConfig.getServiceEndpoint is called. 

    PowerMockito.mockStatic(Connector.class); 
    when(Connector.newConnection(Mockito.any(ConnectorConfig.class))).thenReturn(partnerConnection); 

    PowerMockito.doAnswer(new Answer<Void>() { 
     @Override 
     public Void answer(InvocationOnMock invocation) { 
      ConnectorConfig config = (ConnectorConfig) invocation.getArguments()[0]; 
      config.setServiceEndpoint("service end point"); 
      return null; 
     } 
    }).when(Connector.newConnection(Mockito.any(ConnectorConfig.class))); 
}  

しかし、上記の「未完了のスタブが検出されました」というエラーがスローされます。 Connectorはサードパーティのクラスですので、私はその動作を制御できません。

何が間違っている可能性がありますか?

答えて

11
PowerMockito.doAnswer(new Answer<Void>() { 
    /* ... */ 
}).when(Connector.newConnection(Mockito.any(ConnectorConfig.class))); 

whenが問題です。通常Mockitoでは、任意のdoAnswer/doReturnの/ etcコールを使用して、あなたはそのように、whenにあなたが外線通話のをスタブしている電話をかける必要があります:

Mockito.doAnswer(new Answer<Void>() { 
    /* ... */ 
}).when(yourMock).callVoidMethod(); 
//   ^^^^^^ 

PowerMockitoはさらに、静的メソッドへの呼び出しが必要ですそのように、in the next statement起こる:documentation I linkedが実際に矛盾していることを

PowerMockito.doAnswer(new Answer<Void>() { 
    /* ... */ 
}).when(Connector.class); Connector.newConnection(/*...*/); 
//     ^^^^^^ 

注 - クラスリテラルは、署名の無駄で必要とされるのに対し、ドキュメントは、ゼロ、引数whenにほのめかすように見えますできる。それはバグとしてフラグを立てるのが良いかもしれません。

必須PSA:jury's still out on that oneですが、avoid mocking types you don't ownには一般的には良い考えです。

+0

docリンクのthnx。私は明日それを試してみましょう。 – RandomQuestion

+0

これは機能しました。私はバグを提出した。件名はポイントではありませんが、編集できないようです。 https://code.google.com/p/powermock/issues/detail?id=452&can=4&q=javadoc – RandomQuestion

関連する問題