我已经成功地使用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