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