Unit testing 使用junit5和mockk在kotlin中编写单元测试用例

Unit testing 使用junit5和mockk在kotlin中编写单元测试用例,unit-testing,kotlin,junit5,mockk,Unit Testing,Kotlin,Junit5,Mockk,我对kotlin、junit5和mockk都是新手。我正在为属于类的伴生对象的函数编写单元测试用例。 如何为此编写单元测试用例 class CommonUtility { companion object { @Throws(SecurityException::class) fun initializeFilePath(filePath: String) { val directory = File(filePath)

我对kotlin、junit5和mockk都是新手。我正在为属于类的伴生对象的函数编写单元测试用例。 如何为此编写单元测试用例

class CommonUtility {

    companion object {
        @Throws(SecurityException::class)
        fun initializeFilePath(filePath: String) {
            val directory = File(filePath)
            if (!directory.exists()) {
                try {
                    directory.mkdir()
                } catch (ex: SecurityException) {
                    throw SecurityException("$filePath was not created in system", ex)
                }
                log.info("Created the directory $filePath")
            }
        }
     }
}

谁能给我一个可以为这个函数编写的单元测试的例子。

你应该在这里测试什么

  • 正在使用给定的文件路径创建目录
  • 检查目录已存在时是否未发生任何事件
  • 检查是否在正确的位置引发了安全异常,并包含有意义的消息
示例测试(第一个项目符号):


我建议将方法的名称更改为
createDirectoryWithGiven
,当前名称没有意义。返回您在此方法中创建的内容也是一种很好的做法,这样您的方法将更易于测试。

这是否回答了您的问题?谢谢你的回答,这对写UTs真的很有帮助。我有一个疑问,如何在这里检查安全异常@Test fun
检查异常
({val createdFile=File(“File”)每个{createdFile.mkdir()}抛出SecurityException()资产抛出(SecurityException::class.java){CommonUtility.initializeFilePath(“File”)}. 我写了这篇文章,但在每个{…}块中都给出了errorMissing调用。它不起作用,因为您没有将模拟文件传递给您的方法。查看您的方法
val directory=File(filePath)
,这里您正在创建该文件的一个新实例。在您的情况下,最好的选择是重写方法,而不是将字符串作为参数,将file对象传递到那里,然后您可以轻松地模拟它。
@Test
fun `should create directory with given file path`() {
    CommonUtility.initializeFilePath("file")

    val createdFile = File("file")
    assertTrue(createdFile.exists())

    createdFile.delete() // you have to remove directory after test
}