Джерси / Mockito: исключение NullInsteadOfMockException на клиенте.проверка post call

я столкнулся со странной проблемой с модульным тестированием следующего вызова клиента Джерси:

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)));

вы видите что-нибудь не так с этим кодом?

2 ответов


да. Вы злоупотребили verify. Аргумент verify должен быть сам макет. Затем вы вызываете метод, который хотите проверить на значение, возвращаемое verify. Так что в данном случае первый verify вызов должен быть

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

и аналогично для других verify звонки.


я столкнулся с этой проблемой, но для when() вместо verify(). Я нашел этот вопрос в Google. Для меня, я забыл добавить MockitoAnnotations.initMocks() в конструкторе моего тестового класса.