繁体   English   中英

ClassLoader有时无法加载资源

[英]ClassLoader sometimes fails to load resource

对于单元测试类中的2个测试,我需要一个报告文件。 我尝试加载它如下:

private File getTestFile() {
        try {
            return new File(URLDecoder.decode(ClassLoader.class.getResource("/reports/report.xlsx")
                .getPath(), "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }

当我第一次运行这些测试时,会发生以下情况:

  • 第一个测试:类加载器找到资源并返回文件,测试通过。
  • 第二个测试:类加载器找不到资源并返回null,测试失败。

在此之后,两个测试都会继续失败,直到我重建项目然后第一个测试通过,第二个测试再次失败。

report.xlsx位于src/test/resources/reports/reports.xlsx

有什么我做错了或解释这种行为?

我不是100%确定这是否是您遇到问题的原因,但是使用ClassLoader.class.getResource(...)加载资源似乎很奇怪。 这将在系统类路径中查找资源。 相反,你应该使用getClass().getResource(...)getClass().getClassLoader().getResource(...)

另一个原因:您的测试代码在某处删除了该文件。 这解释了为什么第二次测试无法再找到它,以及为什么第二次测试再次运行测试时也会失败。 但是,在构建项目时,像eclipse这样的IDE总是将所有资源文件从src复制到bin目录,每次重建项目时都会恢复文件。 这就是为什么第一次测试可以在重建后加载文件一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM