模拟 mock<RestTemplate> getForObject 时如何解决歧义?

How to resolve ambiguity when mocking mock<RestTemplate> getForObject?

使用 com.nhaarman.mockitokotlin2 测试 restTemplate.getForObject(url, Int::class.java),url 是 String!

的类型

正在尝试模拟 RestTemplate::getForObject:

val restTemplate = mock<RestTemplate> {
        on { getForObject(any(), any()) } doReturn ResponseEntity.ok(Object())
    }

但是报错:

Overload resolution ambiguity. All these functions match.
public open fun <T : Any!> getForObject(url: URI!, responseType: Class<TypeVariable(T)!>!): TypeVariable(T)! defined in org.springframework.web.client.RestTemplate
public open fun <T : Any!> getForObject(url: String!, responseType: Class<TypeVariable(T)!>!, vararg uriVariables: Any!): TypeVariable(T)! defined in org.springframework.web.client.RestTemplate

Type mismatch.
Required:
Unit
Found:
ResponseEntity<Object!>!

请帮忙,我是 Kotlin 新手

您需要告诉 Mockito 它应该将 String 作为第一个参数。尝试以下操作:

val restTemplate = mock<RestTemplate> {
    on { getForObject(anyString(), eq(Int::class.java)) } doReturn 200
}

您可以在 reference documentation 中阅读有关 anyString() 的更多信息。