【问题标题】:Mockito spy throws stubbing exceptionMockito spy 抛出存根异常
【发布时间】:2019-07-28 05:09:52
【问题描述】:

我正在尝试监视 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"));

当我模拟/监视其他类时,它工作正常

【问题讨论】:

    标签: spring spring-boot kotlin mockito


    【解决方案1】:

    匹配器,例如any(),只能在verify() 调用中使用。你有:

    val httpEntity = HttpEntity(Any(), headers)
    

    您不能在此上下文中使用any(),因为您正在构造一个对象,而不是验证方法调用。您需要在此处传入一个实际值。

    旁注:spy() 旨在包装一个真实的实例。如果您只是模拟一个界面 (RestTemplate),您可能应该改用 mock(RestTemplate::class.java)。

    【讨论】:

    • 是的,我知道,但这并不能解决问题。我想包装真实的实例,所以我只能模拟一些特定的方法。
    【解决方案2】:

    我找到了问题,但我仍然没有得到原因。问题出在 config.randomEndpoint 中。当我将值更改为字符串类型而不注入配置类时,错误消失了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多