gpt4 book ai didi

unit-testing - 如何使用 mockk.io 模拟内部构造的实例?

转载 作者:行者123 更新时间:2023-12-05 01:36:35 26 4
gpt4 key购买 nike

我正在 mockk 和 Junit5 中为 FileUtility 类的伴随对象中定义的静态方法编写单元测试用例。

方法如下,

class FileUtility {

companion object {
fun getFileObject(fileName: String): File {
require(!StringUtils.isBlank(fileName)) { "Expecting a valid filePath" }
val file = File(fileName)
if (file.isHidden)
throw llegalArgumentException()
return file
}
}

}

单元测试用例如下,

@Test
fun `get file object test throws exception when file path is hidden`() {
val filePath = "filepath"
val file = mockk<File>()
every { file.isHidden } returns true
assertThrows(IllegalArgumentException::class.java) {
getFileObject(filePath)
}
verify { file.isHidden}
}

出现以下错误,

Expected java.lang.Exception to be thrown, but nothing was thrown.

此外,verify { file.isHidden} 行不起作用,它给出了以下错误。

java.lang.AssertionError: Verification failed: call 1 of 1: File(#1).isHidden()) was not called

最佳答案

您正在测试的函数实例化了它自己的 File 实例。它没有使用您创建的模拟实例。

对于这种类型的测试,您需要模拟构造函数,以便模拟该类的任何实例化实例。您可以在此处阅读更多信息 https://mockk.io/#constructor-mocks但这是您的示例(使用不同的断言库):

@Test
fun `get file object test throws exception when file path is hidden`() {
val filePath = "filepath"
mockkConstructor(File::class)
every { anyConstructed<File>().isHidden } returns true
assertThat{
getFileObject(filePath)
}.isFailure().isInstanceOf(IllegalArgumentException::class)
verify { anyConstructed<File>().isHidden}
}

关于unit-testing - 如何使用 mockk.io 模拟内部构造的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61853159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com