Java jersey/Mockito:null代替客户端上的MockException.post调用验证

Java jersey/Mockito:null代替客户端上的MockException.post调用验证,java,jersey,mockito,Java,Jersey,Mockito,我在对以下jersey客户端调用进行单元测试时遇到了一个奇怪的问题: WebResource webResource = _client.resource(url); ClientResponse response = webResource .accept("application/json") .type("application/x-www-form-urlencoded")

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

WebResource webResource = _client.resource(url);
ClientResponse response = webResource
                        .accept("application/json")
                        .type("application/x-www-form-urlencoded")
                        .post(ClientResponse.class, postBody);
PostBody是一个多值映射

单元测试验证
accept
type
调用是否正确,但在
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)));

你能看到这个代码有什么问题吗?

是的。您误用了
验证
verify
的参数必须是模拟本身。然后根据
verify
返回的值调用要验证的方法。因此,在这种情况下,第一个
verify
调用应该是

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

对于其他
验证
调用也是如此。

我遇到了这个问题,但是是针对
when()
而不是
验证()。我通过谷歌搜索找到了这个问题。对我来说,我忘了添加测试类的构造函数。

嘿,这确实解决了问题!我混淆了
的语法when
verify
。从昨天开始我就一直在看这段代码,但我不知道出了什么问题。这可能表明我对莫基托是新手。谢谢你的帮助!