与 Kotlin 一起使用的 Mockito 不起作用,因为它仍在调用原始方法



当我将 Mockito 与 Kotlin 一起使用时,似乎模拟不起作用。我仔细检查了我是否以正确的方式使用 Mockito API,并且还进行了调试并看到模拟对象具有 Mockito 拦截器/代理,而不仅仅是一个普通实例。

这是我的最小示例:

import java.nio.file.Path
class MyApp(
private val downloader: Downloader
) {
fun useDownloader(): String {
val fileName = downloader.getFileName("fromUrl")
downloader.download("http://notworking", Path.of("notworking:$fileName"))
return fileName;
}
}
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.mockito.ArgumentMatchers
import org.mockito.Mockito
import java.nio.file.Path
class MyAppTest() {
private val mockedDownloader: Downloader = Mockito.mock(Downloader::class.java)
private val myApp: MyApp = MyApp(mockedDownloader)
@Test
fun testDownloader(){
Mockito.`when`(mockedDownloader.getFileName("fromUrl"))
.thenReturn("testFileName.pdf")
Mockito.doNothing().`when`(mockedDownloader).download(ArgumentMatchers.anyString(), ArgumentMatchers.any(Path::class.java))
assertThat(myApp.useDownloader()).isEqualTo("testFileName.pdf")
}
}

我收到的错误如下:

java.lang.IllegalArgumentException: URI is not absolute
at java.base/java.net.URL.fromURI(URL.java:681)
at java.base/java.net.URI.toURL(URI.java:1116)
at org.springframework.http.client.SimpleClientHttpRequestFactory.createRequest(SimpleClientHttpRequestFactory.java:145)
at org.springframework.http.client.support.HttpAccessor.createRequest(HttpAccessor.java:124)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:738)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:677)
at org.springframework.web.client.RestTemplate.headForHeaders(RestTemplate.java:369)
at fcse.mycompany.importer.app.Downloader.getFileName(Downloader.kt:19)

该错误告诉我,Downloader对象没有被模拟,而是与其原始方法一起使用 - 没有发生拦截。

附加信息:

  • 使用 IntelliJ IDEA
  • 使用 Gradle
  • 由 IDE 测试运行程序(不是 gradle 运行程序(运行

而不是

Mockito.`when`(mockedDownloader.getFileName("fromUrl"))`

Mockito.`when`(mockedDownloader.getFileName(ArgumentMatchers.eq("fromUrl")))

Mockito.`when`(mockedDownloader.getFileName(anyString()))

相关内容

最新更新