我在eclipse helios中创建了一个最小的maven项目,其中只有一个子模块。
在src/test/resources文件夹中,我放置了一个单独的文件"install.xml“。在文件夹src/test/java中,我创建了一个包含单个类的包,该类执行以下操作:
@Test
public void doit() throws Exception {
URL url = this.getClass().getClassLoader().getResource("install.xml");
System.out.println(url.getPath());
}
但是,当我将代码作为JUnit4单元测试运行时,我只得到一个NullPointerException。这之前已经很好地工作过一百万次了。有什么想法吗?
我遵循了这个指南:
http://www.fuyun.org/2009/11/how-to-read-input-files-in-maven-junit/
但是仍然会得到相同的错误。
发布于 2011-08-18 03:44:06
当您使用
this.getClass().getResource("myFile.ext")
getResource
将尝试查找与包相关的资源。如果您使用:
this.getClass().getResource("/myFile.ext")
getResource
会将其视为绝对路径,并简单地调用类加载器,就像调用类加载器一样。
this.getClass().getClassLoader().getResource("myFile.ext")
不能在ClassLoader
路径中使用前导/
的原因是,所有ClassLoader
路径都是绝对的,因此/
不是路径中有效的第一个字符。
发布于 2010-09-27 19:58:23
应该是getResource("/install.xml");
资源名称与getClass()类所在的位置相关,例如,如果您的测试是org/example/foo/MyTest.class
,那么getResource("install.xml")
将在org/example/foo/install.xml
中查找。
如果您的install.xml
在src/test/resources
中,那么它就在类路径的根目录中,因此您需要在资源名称前面加上/
。
此外,如果它只是偶尔工作,那么可能是因为Eclipse清理了输出目录(例如target/test-classes
),而资源只是在运行时类路径中丢失了。验证是否使用Eclipse的Navigator视图,而不是Package explorer。如果缺少文件,则运行mvn package
目标。
发布于 2013-10-30 14:41:00
当eclipse运行测试用例时,它将在target/classes而不是src/ test /resources中查找文件。在保存资源时,如果资源发生了更改,eclipse应该将其从src/test/resources复制到target/classes,但如果由于某些原因没有发生,则会出现此错误。检查目标/类中是否存在该文件,以确定这是否是问题所在。
https://stackoverflow.com/questions/3803326
复制相似问题