我有一种从流媒体终端下载内容的方法.我想要编写此方法的单元测试.我面临的一个问题是,我需要模拟Kotlin扩展方法file.outputStream()
,但我不能模拟
outputStream()
在kotlin-stdlib
FileReadWrite
文件中定义如下
@kotlin.internal.InlineOnly
public inline fun File.outputStream(): FileOutputStream {
return FileOutputStream(this)
}
我的下载方法如下
override fun download(url: String, targetFile: File): Single<File> {
return Single.fromCallable {
fileDownloadApi
.downloadFile(url)
.execute()
.body()?.byteStream()?.use { input ->
targetFile.outputStream().use { output ->
FileUtil.copyFile(input, output)
return@fromCallable targetFile
}
}
targetFile
}
}
我需要嘲笑这第targetFile.outputStream()
部分.
我正在通过模拟targetFile
我的测试代码就像波罗一样
val mockFileOutputStream = mockk<FileOutputStream>()
val mockTargetFile = mockk<File>()
mockkStatic("kotlin.io.FilesKt") // declares as JvmName @file:JvmName("FilesKt")
every { File("abc").outputStream() } returns mockFileOutputStream
service.download("", mockTargetFile)
.subscribe(testObserver)
我嘲笑了file.outputStream()
个,建议了official doc个,但得到了错误
io.mockk.MockKException:在每个{. } block:确保块中的对象是mock
对于第every { File("abc").outputStream() } returns mockFileOutputStream
行
我想不出我错过了什么.请帮我弄清楚这个问题.