Scala de>是一个文件,但是outfile:Option[file]是一个路径类型,因此返回None,而不是所需的java.io.file格式设置很抱歉。tl;dr:我应该期望能够从这种模拟(例如RamPath)中获得java.io.File)吗?不,怎么可能?

Scala de>是一个文件,但是outfile:Option[file]是一个路径类型,因此返回None,而不是所需的java.io.file格式设置很抱歉。tl;dr:我应该期望能够从这种模拟(例如RamPath)中获得java.io.File)吗?不,怎么可能?,scala,testing,mocking,mockito,specs2,Scala,Testing,Mocking,Mockito,Specs2,de>是一个文件,但是outfile:Option[file]是一个路径类型,因此返回None,而不是所需的java.io.file格式设置很抱歉。tl;dr:我应该期望能够从这种模拟(例如RamPath)中获得java.io.File)吗?不,怎么可能?要做到这一点,它必须有一个操作系统级的文件系统驱动程序。但是ScalaIO是一个更丰富的用于I/O和文件操作的API。我将使用ScalaIO扩展或重新编写适当的类,然后在这个测试中,我可以简单地用RamFileSystem替换默认的类。到目前为


de>是一个文件,但是
outfile:Option[file]
是一个
路径类型
,因此返回
None
,而不是所需的
java.io.file
格式设置很抱歉。tl;dr:我应该期望能够从这种模拟(例如
RamPath
)中获得
java.io.File
)吗?不,怎么可能?要做到这一点,它必须有一个操作系统级的文件系统驱动程序。但是ScalaIO是一个更丰富的用于I/O和文件操作的API。我将使用ScalaIO扩展或重新编写适当的类,然后在这个测试中,我可以简单地用
RamFileSystem
替换默认的类。到目前为止,我的经验并不是非常广泛,而是它工作得相当好。如果您的FS和IO交互是可注入或可模拟的,那么您可以轻松设计出完全不涉及物理文件的测试。太棒了,谢谢。这就是我所希望的,但我很快就绊倒了:
val fs=new-RamFileSystem(separator=“/”)println(“filesys:+fs)val-path=fs(“/tmp/”,“/”)println(“path:”+path)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]
是一个
路径类型
,因此返回
,而不是所需的
java.io.file
,抱歉格式化。tl;dr:我应该期望能够从这种模拟(例如
RamPath
)中获得
java.io.File
)吗?不,怎么可能?要做到这一点,它必须有一个操作系统级的文件系统驱动程序。但是ScalaIO是一个更丰富的用于I/O和文件操作的API。我将使用ScalaIO扩展或重新编写适当的类,然后在这个测试中,我可以简单地用
RamFileSystem
替换默认的类。到目前为止,我的经验并不是非常广泛,而是它工作得相当好。如果您的FS和IO交互是可注入或可模拟的,那么您可以很容易地设计出完全不涉及物理文件的测试。
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 
}
val out:OutputStream = null
// val testOut  = new ByteArrayOutputStream()
// val realOut = new FileOutputStream(new File("/tmp/file1.avro"))

g.serializeToOutputStream(out, old)  //Serialize to file

val in:InputStream = null
// val testIn = new ByteArrayInputStream(testOut.toByteArray)
// val realIn = new FileInputStream(new File("/tmp/file1.avro"))

g.asObjectFromInputStream(in)       //Deserialize from file
val f = mock[File]

f.createNewFile returns true
f.isFile returns true
f.list returns Array("child1", "child2")