我已經成功地使用Specs2來測試文件的序列化,但測試使用了一個真實的文件(寫入/ tmp /)。我寧願不爲了測試而接觸磁盤。有沒有辦法使用模擬文件?我可以在Specs2測試中使用模擬文件寫入文件嗎?如果是這樣,怎麼樣?
def serializeAndDeserializeFromDatafile[X <: CaseClass : Manifest](old: X, maybeGrater: Option[AvroGrater[X]] = None): X = {
val g = maybeGrater.getOrElse(grater[X])
//val outfile = mock[File]
val outfile = new File("/tmp/file1.avro")
g.serializeToDataFile(outfile, old) //Serialize to file
val infile = outfile
g.asObjectFromDataFile(infile) //Deserialize from file
}
我試着用Mockito來模擬我的outfile
(上面的註釋行)。在我的天真嘗試中,我可以創建Mock for File, hashCode: 1583021903
,但在嘗試序列化時似乎是null
。
我想我錯過了某種類型的「存根」,但我找不到任何類似的建議解決方案的例子。任何幫助,將不勝感激。
太棒了,謝謝。這是我所希望的,但我很快就發現:'val fs = new RamFileSystem(separator =「/」) println(「filesys:」+ fs) val path = fs(「/ tmp /」,'/ 「) 的println( 「路徑:」 +路徑)的println( 「ISFILE 」+ path.isFile) VAL mockedFile = path.createFile() 的println(「 mockedFile」 + mockedFile) 的println( 「ISFILE」 + mockedFile.isFile ) val outfile = mockedFile.fileOption println(「outfile:」+ outfile)'告訴我'mockedFile'是一個文件,但'outfile:Option [File]'是一個'PathType',因此返回'None'而不是所需的'java.io.File' – 2013-03-14 09:09:52
抱歉格式化。 tl; dr:我應該期望能從這種模擬(例如'RamPath')中獲得一個'java.io.File'嗎? – 2013-03-14 09:14:51
不可以。它必須有一個OS級別的文件系統驅動程序來做到這一點。但是ScalaIO對於I/O和文件操作來說是一個更加豐富的API。 – 2013-03-14 13:37:41