我遇到了一种情况,我正在修改 Java 5 应用程序,并且我想添加额外的测试(与集成测试相邻的单元测试)以确保一切正常工作。我需要应用程序与操作系统提供的实际文件系统完全解耦,并且之后我想检查文件访问模式和新文件内容。我可以在完全受控的环境中在 Java 7 或任何其他版本中运行单元测试,我只需要最终应用程序与 Java 5 兼容,即我需要像 new File(...)
这样的代码成为正在使用的东西。
是否可以在不诉诸黑魔法(字节码操作模拟框架等)的情况下完成此操作,例如通过重新配置 Java 7 或在幕后添加合适的提供程序?
最佳答案
当然,您可以使用 -Xbootclasspath
选项模拟您的 File 类。但是你必须考虑许可问题,恕我直言,它仍然不允许你进行所有必需的测试。
如果文件系统操作对您的应用程序很重要,您应该为文件系统访问创建专用的抽象层。它会以某种方式复制 java IO api,但允许您测试应用程序如何与 IO api 交互。
但是,如果您正在使用一些先进的技术或者您需要高可移植性,那么这对您来说还不够。正如 Joachim 所说,File 类非常依赖于操作系统和文件系统。它在 Linux、Windows 上的表现会有所不同,当你遇到符号链接(symbolic link)、ACL、大写名称等时,它的表现也会有所不同。如果你想测试这种行为,事实上,你必须测试基础设施而不是应用程序。因此,您应该考虑在许多不同环境(可能使用虚拟机)上进行集成测试,而不是单元测试
关于java - Java 7 中集成测试文件系统相关代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15477837/