Tom*_*vic 10 java unit-testing ramdisk
我正在使用第三方库,它基本上创建了一个输出目录,其中包含不同类型的文件和子目录.我希望能够编写单元测试来确认输出是否正确.
我希望能够将lib与RAM磁盘一起使用,这样磁带库就不会以任何方式触及实际的磁盘板.我们的想法是让测试运行和清理非常快(丢弃RAM磁盘?).
我可以使用的两个最突出的选项是Commons VFS和JSR 203.前者对我没用,因为我希望使用java.io.*API而不是Commons VFS类透明地工作.后者没有削减它因为我必须使用JDK 6(它应该是JDK 7的一部分)而且我不知道它是否能与java.io.*无缝地工作(我不会打赌吧.
还有其他解决方案,但我不能使用它们的原因与我不能使用Commons VFS相同.由于所涉及的库的复杂性,模拟是不可能的.
在我的linux机器上,我可以轻松地创建一个RAM驱动器并使用java.io.*API,就像我对磁盘上的文件一样.问题是,我希望它是跨平台的,更具体地说,是让磁盘设置成为测试程序的一部分,而不是外部的东西.
那么,有没有办法在Java中注册一个可以与标准java.io.*API一起使用的RAM驱动器?
那么,有没有办法在Java中注册一个可以与标准java.io.*API一起使用的RAM驱动器?
不适用于Java 6或更早版本的JVM.Java 6及更早版本不提供用于注册文件系统或文件系统类型的任何SPI.因此,要实现应用程序将像普通FS一样使用的RAM FS,需要修改许多java.io.*
类的行为.
我认为你能做的最好的事情就是使用主机操作系统实现的RAM FS.您应该能够从Java访问它,就像它是一个普通的文件系统一样.然而,I/O 将意味着一个系统调用,这样如果RAM文件系统是在JVM持有管理的内存也不会那么快.
从理论上讲,斯蒂芬是对的。但我可以建议你一个技巧。您可以实现自己的FileInputStream和FileOutputStream并将它们放入bootclasspath中。例如,您的实现将实现 open()、read() 和 readBytes() (它们是常规 FileInputStream 中的本机方法。)
这是针对您的问题的纯java解决方案。它的缺点是您必须在单独的 JVM 实例中运行测试。
归档时间: |
|
查看次数: |
6457 次 |
最近记录: |