Mockito间谍抛出了顽固的异常



我正在尝试监视resttemplate,我想固执'交换'方法

这是一些代码:

间谍类

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

当我嘲笑/监视其他类时,它可以正常工作

匹配器(例如any())必须仅在verify()调用中使用。您有:

val httpEntity = HttpEntity(Any(), headers)

在构造对象时,您不能在此上下文中使用any(),而不是验证方法调用。您需要在此处传递实际价值。

旁注:spy()旨在包装真实的实例。如果您只是嘲笑接口(RestTemplate),则可能应该使用mock(RestTemplate::class.java)

我发现了这个问题,但我仍然没有得到原因。问题是在config.randomendpoint中。当我将值更改为字符串类型而无需注入配置类时,错误就消失了。

相关内容

  • 没有找到相关文章

最新更新