我已在我的一个Project for Checkout目的中实现了Masterpass SDK。 API用于通过传递CallBackUrl和OrginURL来获取请求令牌 API已成功实施,并且按预期工作。
问题:我在使用Mockito创建junit测试用例时遇到了问题。
代码:
public void invokeService(AuthTokenRequestBean requestBean) throws Exception {
retrieveAuthTokenService = new RetrieveAuthTokenService(requestBean);
when(processorFactory.createService(eq(RetrieveAuthTokenService.class),
any(AuthTokenRequestBean.class))).
thenReturn(retrieveAuthTokenService);
Mockito.when(retrieveAuthTokenService.getOutput()).thenReturn(response);
Mockito.when(retrieveAuthTokenService.process(any(FlowCtx.class))).thenReturn(response);
}
例外:
rg.mockito.exceptions.misusing.MissingMethodInvocationException:
when()需要一个必须是'模拟方法调用'的参数。 例如: 当(mock.getArticles())thenReturn(文章);
此外,此错误可能会显示,因为: 1.你存在以下任何一个:final / private / equals()/ hashCode()方法。 这些方法无法进行存根/验证。 不支持在非公共父类上声明的模拟方法。 2.在()内部,你不是在模拟上调用方法,而是在其他对象上调用方法。
如果有人使用junit处理这些api进行模拟,那么需要帮助。 是否有任何其他框架可用于模拟。
答案 0 :(得分:0)
我们可以使用PowerMockito模拟MasterPass SDK实现。由于这包含静态方法,因此可以使用PowerMockito进行模拟。
代码段位于以下..
@Mock private ProcessorFactory processorXXXX;
public void setupAndXXXProcessor(AuthTokenRequestXXXX requestBean)抛出异常{ retrieveAuthTokenProcessor = new RetrieveAuthXXXXXX(requestBean); PowerMockito.when( processorXXXX.createProcessor(eq(RetrieveAuthXXXXXX.class),any(AuthTokenRequestXXXX.class))) .thenReturn(retrieveAuthTokenProcessor); PowerMockito.mockStatic(RequestTokenApi.class); 。PowerMockito.when(RequestTokenApi.create(anyString()))thenReturn(" createRequestTokenResponse&#34); PowerMockito.mockStatic(ShoppingCartApi.class); PowerMockito.when(ShoppingCartApi.create(任何(ShoppingCartRequest.class))) .thenReturn(createShoppingCartResponse()); PowerMockito.mockStatic(MerchantInitializationApi.class); PowerMockito.when(MerchantInitializationApi.create(任何(MerchantInitializationRequest.class))) .thenReturn(" createMerchantInitializationResponse&#34);
}