Mockito, используемый с Kotlin, не работает, так как он все еще вызывает оригинальные методы - PullRequest
0 голосов
/ 10 января 2020

Когда я использую 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) )

1 Ответ

0 голосов
/ 10 января 2020

Вместо

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

используйте

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

или

Mockito.`when`(mockedDownloader.getFileName(anyString()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...