Java 如何在JUnit测试中从src/main/resources-relative读取文件?
我有一个junit测试用例和一个我想在测试期间加载的文件。该文件位于Java 如何在JUnit测试中从src/main/resources-relative读取文件?,java,junit,Java,Junit,我有一个junit测试用例和一个我想在测试期间加载的文件。该文件位于src/main/resources下,而包的名称与java测试文件相同: src/test/java/my/path/to/FileTest.java src/test/resource/my/path/to/test.txt 用法: public class FileTest { @Test public void testRead() { String content = IOUtils.
src/main/resources
下,而包的名称与java测试文件相同:
src/test/java/my/path/to/FileTest.java
src/test/resource/my/path/to/test.txt
用法:
public class FileTest {
@Test
public void testRead() {
String content = IOUtils.toString(this.getClass().getResourceAsStream("test.txt"), Charset.defaultCharset());
System.out.println(content);
}
}
在IDE中运行testcase时出现异常:
java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:78)
at java.io.InputStreamReader.<init>(InputStreamReader.java:113)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:2272)
at org.apache.commons.io.IOUtils.toString(IOUtils.java:1041)
java.lang.NullPointerException
在java.io.Reader上。(Reader.java:78)
位于java.io.InputStreamReader。(InputStreamReader.java:113)
位于org.apache.commons.io.IOUtils.copy(IOUtils.java:2272)
位于org.apache.commons.io.IOUtils.toString(IOUtils.java:1041)
这里可能有什么问题?我结束了将测试文件直接放入
/src/main/resources
而不使用子包的过程,并使用了
PropertiesLoaderUtils.loadProperties(新类路径资源(文件名))代码>我结束了将测试文件直接放入/src/main/resources
而不使用子包,并使用
PropertiesLoaderUtils.loadProperties(新类路径资源(文件名))代码>您看到了吗?*必须尝试getResourceAsStream(“/my/path/to/test.txt”)?@user7294900是的,但我不想定义完全限定的包路径。@RC。是的,但也是FileTest.class.getResourcesStream(“test.txt”)代码>在NPE中失败。它应该是System.out.println(新的BufferedReader(新的文件读取器(this.getClass().getClassLoader().getResource(“my/path/to/test.txt”).getFile()).readLine())
不带前导的/
,或System.out.println(新的BufferedReader(新的文件读取器(this.getClass().getResource(“/my/path/to/source.txt”).getFile()).readLine())带前导的/
的code>。顺便说一句,这里使用java 8。您看到了吗?*必须尝试getResourceAsStream(“/my/path/to/test.txt”)?@user7294900是的,但我不想定义完全限定的包路径。@RC。是的,但也是FileTest.class.getResourcesStream(“test.txt”)代码>在NPE中失败。它应该是System.out.println(新的BufferedReader(新的文件读取器(this.getClass().getClassLoader().getResource(“my/path/to/test.txt”).getFile()).readLine())
不带前导的/
,或System.out.println(新的BufferedReader(新的文件读取器(this.getClass().getResource(“/my/path/to/source.txt”).getFile()).readLine())带前导的/
的code>。顺便说一句,这里使用Java8。