1

我正在寻找一种在 Scala 中模拟文件系统的方法。我想做这样的事情:

class MyMainClass(fs: FileSystem) {
   ...
}

正常运行时间:

val fs = FileSystem.default
main = new MyMainClass(fs)

测试时间:

val fs = new RamFileSystem
main = new MyMainClass(fs)

我的示例看起来很像 Scala-IO,我认为这可能是我的答案。但是,看起来 Scala-IO 中的所有核心功能都不能与FileSystem抽象一起使用。特别是,我无法读取 aPath或 apply Path.asInput。此外,一些抽象类似于Path并且Resource似乎与FileSystem.default.

我还在 Scala-Tools 中搜索了一些有趣的东西,但那个项目似乎已经不复存在了。

4

1 回答 1

2

一种选择是创建自己的抽象。像这样的东西:

trait MyFileSystem { def getPath() }

然后,您可以使用真实的 FileSystem 和模拟版本来实现它。

class RealFileSystem(fs: FileSystem) extends MyFileSystem {
  def getPath() = fs.getPath()
}

class FakeFileSystem extends MyFileSystem {
  def getPath() = "/"
}

然后 MyMainClass 可能需要一个 MyFileSystem 而不是 FileSystem

class MyMainClass(fs: MyFileSystem)
main = new MyMainClass(new RealFileSystem(FileSystem.default))
test = new MyMainClass(new FakeFileSystem)
于 2013-03-07T03:38:33.480 回答