Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何使用mockk.io模拟内部构造的实例?_Unit Testing_Kotlin_Junit5_Mockk_Mockito Kotlin - Fatal编程技术网

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

Unit testing 如何使用mockk.io模拟内部构造的实例?,unit-testing,kotlin,junit5,mockk,mockito-kotlin,Unit Testing,Kotlin,Junit5,Mockk,Mockito Kotlin,我正在用Mock和Junit5为FileUtility类的伴生对象中定义的静态方法编写单元测试用例 方法如下: class FileUtility { companion object { fun getFileObject(fileName: String): File { require(!StringUtils.isBlank(fileName)) { "Expecting a valid filePath" } v

我正在用Mock和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}
}
单元测试用例如下所示:

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}
}
另外,verify{file.ishiden}行没有工作,它给出了以下错误

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

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

对于这种类型的测试,您需要模拟构造函数,以便模拟类的任何实例化实例。您可以在此处阅读更多内容,但以下是使用不同断言库的示例:

@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}
}

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

对于这种类型的测试,您需要模拟构造函数,以便模拟类的任何实例化实例。您可以在此处阅读更多内容,但以下是使用不同断言库的示例:

@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}
}

这是线程“main”java.lang.StackOverflowerError错误中出现的异常。@AkashPatel-这是使用mockk执行您想要执行的操作的方式。但是,他们似乎有一个开放的bug票据->一些类似乎遇到了堆栈溢出。。。。不幸的我认为,在他们修复该错误之前,您可能会将自己的发现添加到该问题中。您可能会使用类似于power mock的方法来模拟构造函数。您面临的StackOverflower错误可能与此已知问题有关:这是线程“main”java.lang.StackOverflower错误中出现的异常。@AkashPatel-这是就是你如何使用mockk来做你想做的事情。但是,他们似乎有一个开放的bug票据->一些类似乎遇到了堆栈溢出。。。。不幸的我认为,在他们修复错误之前,您可能会将自己的发现添加到该问题中。您可能会使用类似power mock的方法来模拟构造函数。您面临的StackOverflower错误可能与此已知问题有关: