Я столкнулся со странной проблемой при модульном тестировании следующего вызова клиента 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)));

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

10
Joanna Derks 6 Мар 2015 в 12:07

2 ответа

Лучший ответ

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

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

И то же самое для других вызовов verify.

18
Dawood ibn Kareem 6 Мар 2015 в 09:16

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

1
entpnerd 31 Май 2018 в 06:14