Maven 测试失败,因为文件修改时间得到更新

maven test failing as file modified timings get updated

我有一个 java 项目,其中一些测试文件位于以下位置:

src\test\resources\data\file\daily

我有一些 Junit 测试用例,可以根据文件修改时间进行检查和断言。

FileTime modFileTime = Files.getLastModifiedTime(Paths.get(classPathResource.getFile().getPath()));

当我在没有 Maven 的情况下使用 intellij 执行测试用例时,我的测试通过了并且 modFileTime 有过去的时间,例如16/04/21 19:48

但是,当我 运行 使用 maven clean test 作为 target\test-classes\data\file\daily 目录中的文件修改时间获取更新时间的测试时,我的测试用例失败了。

如何保留原始文件的修改时间?或者对此有通用的解决方案吗?

测试调用的方法:

private boolean isFileAvailable(String file) throws IOException {
    ClassPathResource classPathResource = new ClassPathResource(file);
    boolean exists = Files.exists(Paths.get(classPathResource.getFile().getPath()));
    if (exists) {
        FileTime modFileTime = Files.getLastModifiedTime(Paths.get(classPathResource.getFile().getPath()));
        long modFileMinutes = modFileTime.to(TimeUnit.MINUTES);
        long minutes = FileTime.from(Instant.now()).to(TimeUnit.MINUTES);

        return minutes - modFileMinutes >= 5;
    } else {
        return false;
    }
}

mvn clean 在 运行 测试之前删除目标/目录中的所有内容,并重新填充它。因此,时间戳将每隔 运行 更改一次。但这也适用于项目的初始(干净)签出,您应该在任何发布构建之前执行此操作,所以......这是一件很正常的事情。

不过,我同意所有评论——您的测试(未发布)没有多大意义。如果你想让你的测试检查一个带有相对时间戳的文件,那么例如将文件上的时间戳设置为 4 分钟前并确认未加载,然后将其设置为 6 分钟前并确认已加载。您可以在测试中设置测试文件的最后修改值。这比依赖测试执行系统 ​​(maven) 本身中的某些东西要可靠得多,特别是如果您生成测试文件作为测试的一部分(一个好主意)

此外:如果您只想加载早于特定时间的数据文件,那么我怀疑您是否真的想让这些成为类路径资源。它们可能应该从其他已知位置加载。我怀疑您正在尝试聪明地解决一些问题,而这些问题可以通过 https://commons.apache.org/

中的内容更好地解决