java - jersey/Mockito : NullInsteadOfMockException on client. 通话后验证

标签 java jersey mockito

我在对以下 Jersey 客户端调用进行单元测试时遇到了一个奇怪的问题:

WebResource webResource = _client.resource(url);
ClientResponse response = webResource
                        .accept("application/json")
                        .type("application/x-www-form-urlencoded")
                        .post(ClientResponse.class, postBody);

PostBody 是一个多值映射。

单元测试可以很好地验证 accepttype 调用,但在 post 调用时失败,出现以下异常:

org.mockito.exceptions.misusing.NullInsteadOfMockException: 
Argument passed to verify() should be a mock but is null!

测试代码如下:

_client = Mockito.mock(Client.class);
        _webResource = Mockito.mock(WebResource.class);
        _builder = Mockito.mock(WebResource.Builder.class);
        _response = Mockito.mock(ClientResponse.class);

        Mockito.when(_client.resource(Mockito.anyString())).thenReturn(_webResource);

        Mockito.when(_response.getEntity(Mockito.any(Class.class))).thenReturn(new RefreshTokenDto());
        Mockito.when(_response.getStatus()).thenReturn(200);

        Mockito.when(_builder.post(Mockito.eq(ClientResponse.class), Mockito.anyObject())).thenReturn(_response);
        Mockito.when(_builder.type(Mockito.anyString())).thenReturn(_builder);
        Mockito.when(_webResource.accept(Mockito.anyString())).thenReturn(_builder);

        RefreshTokenDto response = _clientWrapper.exchangeAuthorizationCodeForToken(_token);

        Assert.assertNotNull(response);

        Mockito.verify(_client.resource(_baseUrl + "token"));
        Mockito.verify(_webResource.accept("application/json"));
        Mockito.verify(_builder.type("application/x-www-form-urlencoded"));

        // TODO: this line throws NullRefExc for some unknown reason
        Mockito.verify(_builder.post(Mockito.any(Class.class), Mockito.any(MultivaluedMap.class)));

你能看出这段代码有什么问题吗?

最佳答案

是的。您误用了 verifyverify 的参数必须是 mock 本身。然后调用要验证 verify 返回值的方法。所以在这种情况下,第一个 verify 调用应该是

Mockito.verify(_client).resource(_baseUrl + "token");

对于其他 verify 调用也是如此。

关于java - jersey/Mockito : NullInsteadOfMockException on client. 通话后验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28895450/

相关文章:

java - Jetty 的 HTTP/2 问题 - 无效的前言

java - 如何使用 suns 简单的 httpserver 提供静态内容

java - 如何使用 mockito 验证参数化方法

使用 mockito 进行 Android 仪器测试

java - 无法运行 JDI 跟踪示例 : Error: Could not find or load main class

java - Android/Java创建帮助程序类以创建图形

java - 如何从弹出窗口转到新 Activity ?

java - jetty : store request-specific information

java - 如何对部署在 Tomcat 上的 Jersey Web 应用程序进行单元测试?

java - "Mock"固定参数方法