【问题标题】:Integration test file system dependent code in Java 7Java 7 中的集成测试文件系统相关代码
【发布时间】:2013-03-18 13:18:29
【问题描述】:

我有一种情况,我正在修改 Java 5 应用程序,我想添加额外的测试(与集成测试接壤的单元测试)以确保一切正常。我需要将应用程序与操作系统提供的实际文件系统完全分离,然后我想查看文件访问模式和新文件内容。我可以在 Java 7 或任何其他版本中在完全受控的环境中运行单元测试,我只需要最终应用程序与 Java 5 兼容,即我需要像 new File(...) 这样的代码才能使用。

这是否可以在不求助于黑魔法(字节码操纵模拟框架等)的情况下完成,例如通过重新配置 Java 7 或在幕后添加合适的提供程序?

【问题讨论】:

  • 我怀疑这很容易,因为File非常 硬连线的文件系统。操作系统级别的“诡计”,例如chroot environment 是一种可能的解决方案吗?

标签: java unit-testing integration-testing


【解决方案1】:

当然,您可以使用 -Xbootclasspath 选项模拟您的 File 类。但是您必须考虑许可问题,恕我直言,它仍然不会让您进行所有必需的测试。

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

但是,如果您使用一些高级技术或需要高便携性,这对您来说是不够的。正如 Joachim 所说,File 类非常依赖于操作系统和文件系统。当你遇到符号链接、acls、大写名称等时,它在 linux、windows 上的行为会有所不同。如果你想测试这种行为,事实上,你必须测试基础设施而不是应用程序。因此,您应该考虑在许多不同环境(可能使用虚拟机)上进行集成测试,而不是单元测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 2013-01-12
    • 2016-07-25
    • 2017-12-11
    • 1970-01-01
    • 2015-08-19
    相关资源
    最近更新 更多