0

对于单元测试类中的 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.

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

4

1 回答 1

2

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

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

于 2013-11-12T09:47:40.570 回答