Когда я использую Mockito с Kotlin, кажется, что насмешка не работает. Я дважды проверил, правильно ли я использую API-интерфейс Mockito, а также отладил и увидел, что у смоделированного объекта есть перехватчик / прокси-сервер 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 Test Runner (не в Gradle) )