Java 如何使用Mockito/PowerMockito解决ClassCastException

Java 如何使用Mockito/PowerMockito解决ClassCastException,java,junit,mockito,powermock,Java,Junit,Mockito,Powermock,我需要使用PowerMocklito模拟两个静态方法。它为第一行代码提供了一个模拟对象,但随后再次调用了相同的方法,但这次它返回了一个不同的对象,并抛出了ClassCastException 测试中的方法 ESignatureJaxBContextFactory context = (ESignatureJaxBContextFactory) AppContext.getBean("jaxbContextFactory"); /// More code DocusignRESTClient cl

我需要使用PowerMocklito模拟两个静态方法。它为第一行代码提供了一个模拟对象,但随后再次调用了相同的方法,但这次它返回了一个不同的对象,并抛出了
ClassCastException

测试中的方法

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

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


提前感谢

问题是您正在为
any(String.class)
试试这个:

PowerMockito.when(AppContext.getBean("jaxbContextFactory"))
            .thenReturn(eSignatureJaxBContextFactory);
PowerMockito.when(AppContext.getBean("restServiceClient"))
            .thenReturn(docusignRESTClient);
在这种情况下,当使用参数
“jaxbContextFactory”
调用
AppContext.getBean
时,它将返回
esignatorejaxbcontextfactory
,但不会返回任何其他参数。因此,您还需要使用参数“restServiceClient”模拟调用

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

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

在这种情况下,您仍然使用任何字符串值作为参数来模拟对
AppContext.getBean
的任何调用,但告诉mockito在第一次调用时返回
eSignatureJaxBContextFactory
,在第二次调用和任何后续调用时返回
docusingRestClient

这两种解决方案对我都有效。你的解决方案是如此的逻辑和简单。非常感谢你。
PowerMockito.when(AppContext.getBean(any(String.class)))
            .thenReturn(eSignatureJaxBContextFactory, docusignRESTClient);