【问题标题】:Junit test fail on maven clean install - load a file in test resources folderMaven 全新安装上的 Junit 测试失败-在测试资源文件夹中加载文件
【发布时间】:2019-06-02 00:09:33
【问题描述】:

我有一个项目,在测试文件夹中有一个资源文件:

  • src/test/resources/myfolder/testfile.txt

我有:

@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);

我必须做什么?

谢谢

【问题讨论】:

    标签: java maven jenkins junit


    【解决方案1】:

    我为相同的代码创建了相同的代码,它对我有用。请找到下面的代码,这可能会对您有所帮助。

    我的 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

    https://github.com/itthought/junitTest

    【讨论】:

      【解决方案2】:

      您的testfile.txt 资源位于正确的位置。除非您有自定义 Maven 资源过滤规则,否则这应该可以工作,例如排除 .txt 文件。在构建失败后检查 target/test-classes 中的内容。

      您可以尝试使用绝对资源路径/myfolder/testfile.txt 并停止使用ContextClassLoader

      String path = "/myfolder/testfile.txt";
      InputStream inputStream = MyClass.class.getResourceAsStream(path);
      

      【讨论】:

        【解决方案3】:

        您可以尝试在 pom.xml 中添加以下带有构建标记的行。

            <directory>src/test/resources</directory>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-02
          • 1970-01-01
          • 2020-08-28
          相关资源
          最近更新 更多