我有一个项目的测试文件夹中有一个资源文件:
我有:
@Test
public void test() {
String args[] = { "myfolder/testfile.txt" };
MyClass.load(args);
}
这是MyClass.java方法:
public void load(String filePath)
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream inputStream = classloader.getResourceAsStream(filePath);
InputStreamReader streamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
reader = new BufferedReader(streamReader);
//...
}
如果我从Eclipse启动测试,那么所有测试都会顺利进行。
我启动了Maven全新安装,此行的测试java.lang.NullPointerException
失败:
InputStreamReader streamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
我该怎么办?
谢谢
答案 0 :(得分:0)
您的testfile.txt
资源在正确的位置。除非您有自定义的Maven资源过滤规则,否则这应该起作用。排除.txt
个文件。在构建失败后检查target/test-classes
中的内容。
您可以尝试改用绝对资源路径/myfolder/testfile.txt
,然后停止使用ContextClassLoader
:
String path = "/myfolder/testfile.txt";
InputStream inputStream = MyClass.class.getResourceAsStream(path);
答案 1 :(得分:0)
您可以尝试在pom.xml中添加带有build标签的以下行。
<directory>src/test/resources</directory>
答案 2 :(得分:0)
我为相同的代码创建了相同的代码,并且对我有用。请找到以下代码,这可能会对您有所帮助。
我的pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.radhey</groupId>
<artifactId>junitTest</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java-version>1.8</java-version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
主班
public class TestJunit {
public void load(String filePath) {
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream inputStream = classloader.getResourceAsStream(filePath);
InputStreamReader streamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(streamReader);
String strCurrentLine;
try {
while ((strCurrentLine = reader.readLine()) != null) {
System.out.println(strCurrentLine);
}
}catch (Exception e)
{
e.printStackTrace();
}
}
}
和测试班
public class Test {
@org.junit.Test
public void test() {
String args[] = { "test/testfile.txt" };
TestJunit test2 = new TestJunit();
test2.load(args[0]);
}
}
我还将此代码添加到了git