2013-03-07 88 views
1

我正在尋找一種方法來模擬Scala中的文件系統。我想要做這樣的事情:有沒有辦法在Scala中模擬單元測試的文件系統

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

正常運行時間:

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

測試時間:

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

我的例子看起來很像斯卡拉-IO,我認爲這可能是我的答案。但是,它看起來並不像Scala-IO中的所有核心功能都適用於抽象。特別是,我無法從Path讀取或應用Path.asInput。此外,PathResource等幾個抽象似乎與FileSystem.default緊密結合。

我也在Scala-Tools中搜索了一些有趣的東西,但那個項目似乎已經失效了。

Rob

+0

斯卡拉,工具本身是沒有了,但其文物被託管有剛搬到其他地方的項目。 – 2013-03-07 14:59:37

回答

2

一種選擇是創建自己的抽象。像這樣:

trait MyFileSystem { def getPath() } 

然後,你可以用一個真正的FileSystem和一個模擬版本來實現它。

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

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

然後MyMainClass可以要求MyFileSystem,而不是一個文件系統

class MyMainClass(fs: MyFileSystem) 
main = new MyMainClass(new RealFileSystem(FileSystem.default)) 
test = new MyMainClass(new FakeFileSystem) 
+0

如果找不到我想要的東西,這是一個很好的折中方案。也許我可以打包Scala IO來獲得我想要的嘲笑,但仍然可以利用Scala IO中的Scala習慣用法。 – 2013-03-08 19:14:41

+0

我也被告知Java 7或8可能有我在找的東西。即使我更喜歡慣用的Scala,我也許會考慮一下。 – 2013-03-08 19:15:50

相關問題