0

我已经在我的一个项目中实施了 Masterpass SDK 以进行结帐。该 API 用于通过 CallBackUrl 和 OrginURL 获取请求 Token 该 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() 需要一个参数,该参数必须是“模拟方法调用”。例如:when(mock.getArticles()).thenReturn(articles);

此外,此错误可能会出现,因为: 1. 您存根以下任一方法:final/private/equals()/hashCode() 方法。这些方法不能被存根/验证。不支持在非公共父类上声明的模拟方法。2. 在 when() 中,您不会在 mock 上调用方法,而是在其他对象上调用方法。

如果有人在使用 junit 模拟这些 api 工作,需要帮​​助。是否有任何其他框架可用于模拟。

4

1 回答 1

0

我们可以使用 PowerMockito 模拟 MasterPass SDK 实现。由于 This 包含静态方法并且可以使用 PowerMockito 进行模拟。

代码片段如下..

@Mock 私有 ProcessorFactory 处理器XXXX;

公共无效 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"); PowerMockito.mockStatic(ShoppingCartApi.class); PowerMockito.when(ShoppingCartApi.create(any(ShoppingCartRequest.class))) .thenReturn(createShoppingCartResponse()); PowerMockito.mockStatic(MerchantInitializationApi.class); PowerMockito.when(MerchantInitializationApi.

}

于 2017-07-28T13:22:14.283 回答