2013-03-18 31 views
1

我有一种情况,我正在修改一个Java 5应用程序,并且我想添加额外的测试(单元测试接近集成测试)以确保事情正常工作。我需要应用程序与操作系统提供的实际文件系统完全分离,并且我希望在以后检查文件访问模式和新文件内容。我可以在完全控制的环境中运行Java 7或任何其他版本的单元测试,我只需要最终的应用程序与Java 5兼容,即我需要像new File(...)这样的代码来处理。Java 7集成测试文件系统相关代码

这可以通过重新配置Java 7或添加一个合适的提供者来完成,而不诉诸黑魔法(字节代码操纵嘲讽框架等)

+0

我怀疑这很容易,因为'文件'是*非常*硬连线与文件系统一起工作。操作系统级别的“欺骗”,如[chroot环境](https://en.wikipedia.org/wiki/Chroot)是否可能的解决方案? – 2013-03-18 14:40:24

回答

0

当然你可以用-Xbootclasspath选项来模拟你的File类。但是那么你必须考虑许可问题,而且它仍然不会让你做所有必需的测试。

如果文件系统操作对您的应用程序很重要,则应该为文件系统访问创建专用抽象层。它会以某种方式复制java IO api,但允许您测试应用程序与IO api的交互方式。

但是,如果您正在使用某些高级技术,或者您需要较高的可移植性,那么这对您而言是不够的。正如Joachim所说,File类非常依赖于操作系统和文件系统。当你遇到符号链接,acls,upercase名字等等,如果你想测试这种行为,它在Linux和windows上的表现会有所不同,实际上,你将不得不测试基础结构而不是应用程序。因此,而不是单元测试,你应该考虑在许多不同的环境(可能使用虚拟机)的集成测试