[英]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;
}
当我第一次运行这些测试时,会发生以下情况:
在此之后,两个测试都会继续失败,直到我重建项目然后第一个测试通过,第二个测试再次失败。
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.