Ram*_*gil 8 filesystems unit-testing scala scalatest
在 Scala 中,单元测试如何创建一个临时目录以用作测试的一部分?
我正在尝试对依赖于目录的类进行单元测试
class UsesDirectory(directory : java.io.File) {
...
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找以下形式的东西:
class UsesDirectorySpec extends FlatSpec {
val tempDir = ??? //missing piece
val usesDirectory = UsesDirectory(tempDir)
"UsesDirectory" should {
...
}
}
Run Code Online (Sandbox Code Playgroud)
此外,关于在单元测试完成后适当清理资源的任何评论/建议都会有所帮助。
预先感谢您的考虑和回应。
小智 9
Krzysztof 的回答提供了一个很好的策略,可以完全避免在测试中使用临时目录。
但是,如果您确实需要UsesDirectory处理真实文件,则可以执行以下操作来创建临时目录:
import java.nio.file.Files
val tempDir = Files.createTempDirectory("some-prefix").toFile
Run Code Online (Sandbox Code Playgroud)
关于清理,您可以使用 JVM 关闭挂钩机制来删除临时文件。
(java.io.File确实提供了deleteOnExit()方法,但它不适用于非空目录)
您可以使用sys.addShutdownHook {},实现自定义关闭挂钩,并使用Files.walk或Files.walkTree删除临时目录的内容。
此外,您可能还想看看Better-files 库,它为常见文件操作提供了一个不太冗长的 scala API,包括File.newTemporaryDirectory()和file.walk()