2017-04-19 14 views
1

PowerMocklitoを使用して2つの静的メソッドをモックする必要がある状況に陥っています。それは私にコードの最初の行のための嘲笑されたオブジェクトを与えますが、同じメソッドが再び呼び出されますが、今度は別のオブジェクトを返していて、これはClassCastExceptionをスローします。Mockito/PowerMockitoを使用してClassCastExceptionを解決する方法

テスト中のメソッド

ESignatureJaxBContextFactory context = (ESignatureJaxBContextFactory) AppContext.getBean("jaxbContextFactory"); 
/// More code 
DocusignRESTClient client = (DocusignRESTClient) AppContext.getBean("restServiceClient"); 

JUnitの

private ESignatureJaxBContextFactory eSignatureJaxBContextFactory; 
eSignatureJaxBContextFactory = mock(ESignatureJaxBContextFactory.class); 

PowerMockito.when(AppContext.getBean(any(String.class))).thenReturn(eSignatureJaxBContextFactory); 

ので、上記のコード行は、私のモックコンテキストを返しますが、それは、クライアントを取得しようとしたとき、私は例外を取得します。これをどうすればテストできますか? AppContext.getBeanがパラメータ"jaxbContextFactory"で呼び出されたとき、それはではなく、任意のためのeSignatureJaxBContextFactoryを返します。この場合

PowerMockito.when(AppContext.getBean("jaxbContextFactory")) 
      .thenReturn(eSignatureJaxBContextFactory); 
PowerMockito.when(AppContext.getBean("restServiceClient")) 
      .thenReturn(docusignRESTClient); 

:事前

答えて

1

問題で

おかげで、あなたがこれを試してみてくださいany(String.class) ためAppContext.getBeanをからかっていることです他のパラメータ。したがって、パラメータ"restServiceClient"を使用して呼び出しをモックする必要もあります。それをテストする

他の方法は、連続した戻り値のセットを提供することである。この場合、

PowerMockito.when(AppContext.getBean(any(String.class))) 
      .thenReturn(eSignatureJaxBContextFactory, docusignRESTClient); 

それでもパラメータとして任意の文字列値でAppContext.getBeanのいずれかの呼び出しを模擬したが、eSignatureJaxBContextFactoryを返すようにmockitoを言っています2回目以降の呼出しではdocusignRESTClientを返します。

+0

両方の解決策が私のために働いた。あなたのソリューションはとても論理的でシンプルです。どうもありがとうございます。 – Mike

関連する問題