2017-04-19 142 views
1

我处于需要使用PowerMocklito模拟两种静态方法的情况。它为第一行代码提供了一个模拟对象,但是之后再次调用同一个方法,但是这次它返回一个不同的对象,并且这会引发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); 

所以上面的代码行返回我的模拟情境,但我得到一个异常时,它试图获取客户端。我如何测试这个?

在此先感谢

回答

1

的问题是,你在嘲讽AppContext.getBeanany(String.class) 试试这个:

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

在这种情况下,当AppContext.getBean与参数"jaxbContextFactory"调用它会返回eSignatureJaxBContextFactory,但没有任何其他参数。所以你也需要用参数"restServiceClient"来模拟调用。

测试它是提供一组连续的返回值的其他方式:

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

在这种情况下,你仍然嘲笑的AppContext.getBean任何调用任意字符串值作为参数,但都在讲的Mockito返回eSignatureJaxBContextFactory在第一次调用时返回docusignRESTClient并且返回任何进一步的调用。

+0

这两种解决方案都适合我。您的解决方案非常合理且简单。非常感谢。 – Mike

相关问题