Шпион Mockito бросает исключение окурка - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь шпионить restTemplate и хочу заглушить метод 'exchange'

Вот код:

шпионский класс

@Bean
  fun mockedRestTemplate(): RestTemplate = Mockito.spy(RestTemplate::class.java)

другой класс

   val headers = HttpHeaders()
   headers.setBasicAuth(UUID.randomUUID().toString(), UUID.randomUUID().toString())

   val responseBody = "some error message"

   val ex = HttpClientErrorException.create(
        HttpStatus.NOT_FOUND,
        "random",
        headers,
        responseBody.toByteArray(),
        Charset.defaultCharset()
    )

   val httpEntity = HttpEntity(Any(), headers)

   Mockito.doThrow(ex).`when`(restTemplate).exchange(
            any() ?: config.randomEndpoint,
            any(HttpMethod::class.java) ?: HttpMethod.POST,
            any() ?: httpEntity,
            any() ?: Foo::class.java
   )

Что я могу здесь делать не так? Я получаю это сообщение об ошибке:

    org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
0 matchers expected, 1 recorded:
-> at test.suites.controller.FooTest.canGetFailedErrorFieldsIfApiRejectsRequest(FooTest.kt:468)

This exception may occur if matchers are combined with raw values:
    //incorrect:
    someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
    //correct:
    someMethod(anyObject(), eq("String by matcher"));

Когда я шучу / шпионю за другими классами, все работает нормально

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Сопоставители, такие как any(), должны использоваться только в verify() вызовах.У вас есть:

val httpEntity = HttpEntity(Any(), headers)

Вы не можете использовать any() в этом контексте, поскольку вы создаете объект, а не проверяете вызов метода.Вам необходимо указать фактическое значение здесь.

Примечание: spy() предназначено для обёртывания реального экземпляра.Если вы просто копируете интерфейс (RestTemplate), вам, скорее всего, следует использовать mock(RestTemplate::class.java).

0 голосов
/ 07 марта 2019

Я нашел проблему, но все еще не понял причину. Проблема была в config.randomEndpoint. Когда я изменил значение на строковый тип без введения класса config, ошибка исчезла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...