我处于需要使用PowerMocklito模拟两个静态方法的情况。它为第一行代码提供了一个模拟对象,但是再次调用相同的方法,但这次它返回一个不同的对象,这会抛出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 );
因此上面的代码行返回我的模拟上下文,但是当它尝试获取客户端时我得到一个异常。我该怎么测试呢?
提前致谢
答案 0 :(得分:1)
问题是您正在为AppContext.getBean
模仿any( 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);
在这种情况下,您仍然使用任何String值作为参数模拟AppContext.getBean
的任何调用,但是告诉mockito在第一次调用时返回eSignatureJaxBContextFactory
并在第二次调用时返回docusignRESTClient
进一步的调用。