java - 如何加载相对于类包的文件?

标签 java maven unit-testing junit junit4

我在名为 fixtures 的子目录中有文件 allDepartments.json,我想从 Fixture.java 类访问它。

enter image description here

这是我的 Fixture.java 代码:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public final class Fixture {
    private static final String FIXTURES_PATH = "";
    private final String fixture;

    public Fixture(String fixtureName) throws IOException {
        fixture = new String(Files.readAllBytes(Paths.get(FIXTURES_PATH + fixtureName)));
    }

    public final String getFixture() {
        return fixture;
    }
}

然而,每次他尝试访问该文件时,我都会得到一个java.nio.file.NoSuchFileException: allDepartments.json...

我听说过 getResource() 方法并尝试了所有可能的组合,但没有成功。

我需要它来为我的 JUnit 测试存储多行字符串。

我能做什么?

最佳答案

NIO.2 API不能用于读取有效项目资源的文件,即类路径中存在的文件。

在您的情况下,您有一个 Maven 项目和一个资源,您希望在应用程序的单元测试期间阅读这些资源。首先,这意味着该资源应放在 src/test/resources 下,以便 Maven 在测试期间自动将其添加到类路径中。其次,这意味着您不能使用 Files 实用程序来读取它。

您将需要求助于使用传统的 BufferedReader:

public Fixture(String fixtureName) throws IOException {
    try (BufferedReader br = new BufferedReader(new InputStreamReader(Fixture.class.getResourceAsStream(FIXTURES_PATH + fixtureName)))) {
        // do your thing with br.readLine();
    }
}

请注意为 getResourceAsStream 提供的路径是相对于当前类的路径或绝对路径。如果资源位于 src/test/resources/folder/allDepartments.json 中,则有效路径为 /folder/allDepartments.json

关于java - 如何加载相对于类包的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34812341/

相关文章:

ruby-on-rails - 用于对为 Rails 或 Sinatra 编写的 RESTful API 进行单元测试的选项有哪些?

java - Spock 模拟验证返回 0 次调用

java - Spring:单元和集成测试

java - 使用 MapReduce 在 couchbase 中动态 View

java - 使用 Kotlin 在运行时添加 fragment 会导致 'Unfortunately app has stopped'

java - 我应该如何从另一个spring项目中调用打包的spring项目?

java - 为什么我需要添加 Artifact JSR305 才能使用 Guava 14+?

hibernate - 在两个应用程序中访问相同的 hibernate.cfg.xml

java - 从类路径获取文件,以便测试可以在所有机器上运行

java - 将事件添加到此日历