scala - 如何在 Scala 单元测试中创建临时目录

标签 scala unit-testing filesystems scalatest

在 Scala 中,单元测试如何创建一个临时目录以用作测试的一部分?

我正在尝试对依赖于目录的类进行单元测试

class UsesDirectory(directory : java.io.File) {
  ...
}

我正在寻找以下形式的东西:
class UsesDirectorySpec extends FlatSpec {
  val tempDir = ??? //missing piece

  val usesDirectory = UsesDirectory(tempDir)

  "UsesDirectory" should {
    ...
  }
}

此外,关于在单元测试完成后适当清理资源的任何评论/建议都会有所帮助。

预先感谢您的考虑和回应。

最佳答案

Krzysztof 的回答提供了一个很好的策略,可以完全避免在测试中使用临时目录。

但是,如果您确实需要 UsesDirectory要处理真实文件,您可以执行以下操作来创建临时目录:

import java.nio.file.Files
val tempDir = Files.createTempDirectory("some-prefix").toFile

关于清理,您可以使用 JVM 关闭 Hook 机制来删除临时文件。

( java.io.File 确实提供了 deleteOnExit() 方法,但它不适用于非空目录)

您可以使用 sys.addShutdownHook {} 实现自定义关闭 Hook ,并使用 Files.walkFiles.walkTree删除临时目录的内容。

你也可能想看看 better-files library ,它为常见文件操作提供了一个不那么冗长的 scala API,包括 File.newTemporaryDirectory()file.walk()

关于scala - 如何在 Scala 单元测试中创建临时目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54946535/

相关文章:

java - Apache Spark 中的矩阵乘法

java - jacoco 插件的 SonarQube 覆盖率百分比显示为零,但可以看到单元测试的数量

c++ - 允许在应用程序级别挂载的文件系统库

android - android的文件系统可以直接从应用程序访问吗

linux - 如何为 SSD 闪存驱动器安装 UBIFS 文件系统?

scala - 基于级联的烫伤(旧版本)计数器

Scala - 特征成员初始化 : use traits to modify class member

java - Hamcrest 匹配器在字符串列表中没有重复项?

c# - 单元测试 c# 模拟接口(interface)由另一个接口(interface)组成

java - 从 Enumerator[Array[Byte]] 创建 Java InputStream