对于单元测试类中的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;
}
当我第一次运行这些测试时,会发生以下情况:
在此之后,两个测试都会继续失败,直到我重建项目然后第一个测试通过,第二个测试再次失败。
report.xlsx位于src/test/resources/reports/reports.xlsx
。
我做错了什么或解释了这种行为?
答案 0 :(得分:2)
我不能100%确定这是否是您遇到问题的原因,但是使用ClassLoader.class.getResource(...)
加载资源似乎很奇怪。这将在系统类路径中查找资源。相反,您应该使用getClass().getResource(...)
或getClass().getClassLoader().getResource(...)
!
另一个原因:您的测试代码在某处删除了该文件。这解释了为什么第二次测试无法再找到它,以及为什么第二次测试再次运行测试时也会失败。 但是,在构建项目时,像eclipse这样的IDE总是将所有资源文件从src复制到bin目录,每次重建项目时都会恢复文件。这就是为什么第一次测试可以在重建后加载文件一次。