java - Java 7 中集成测试文件系统相关代码

标签 java unit-testing integration-testing

我遇到了一种情况,我正在修改 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/

相关文章:

unit-testing - 应该测试内部实现,还是只测试公共(public)行为?

java - apache poi 评论作者错过了

c# - ReactiveUI 测试中的调度程序

java - 我们可以在 Pega Tool 中编写自动化单元测试吗?

javascript - 以随机顺序运行单元测试有什么意义?

spring-boot - @DataJpaTest 在 MySQL 中更新实际数据,但在 H2 中工作正常

java - 如何在java中使用\\p{Punct}检查文本行的开头是否为: {"

java - 网络订单简称(Java)

java - 如何从 Java 创建 Meteor 密码?

java - 有没有办法自定义Concordion的 "info box"