在 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.walk
或 Files.walkTree
删除临时目录的内容。你也可能想看看 better-files library ,它为常见文件操作提供了一个不那么冗长的 scala API,包括
File.newTemporaryDirectory()
和 file.walk()
关于scala - 如何在 Scala 单元测试中创建临时目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54946535/