如何更改特定Maven模块的junit相对资源路径?

时间:2019-04-27 09:36:52

标签: java maven junit

我具有以下项目结构(projectmodule都包含pom.xml个文件):

Image

现在,在测试类SomeTest.java中,我想使用资源文件夹中的image.jpg测试某些功能。

我使用以下文件路径作为常量:

private static final String IMG_PATH = "src/test/resources/image.jpg";

然后我使用

将其作为文件读取
BufferedImage image = ImageIO.read(new File(IMG_PATH));

使用以下Maven配置运行该项目时,一切正常。

Image

但是,当手动运行单元测试时,由于文件路径不同,无法找到映像。

打印文件路径将以下内容显示为绝对路径:

C:\Users\Name\Documents\project\src\test\resources\image.jpg

如您所见,它是project/src而不是project/module/src

如何配置JUnit,使其资源的根文件夹是Maven模块文件夹而不是项目文件夹?

我希望能够使用Maven以及手动调试来运行测试。

1 个答案:

答案 0 :(得分:1)

Maven默认将(测试)资源文件夹复制到target文件夹,然后将其添加到其类路径。

所以有效的方法是将文件作为资源从类路径加载到输入流中,然后将该输入流馈送到ImageIO.read(java.io.InputStream)中。

try (InputStream inStream = SomeTest.class.getResourceAsStream('/image.jpg')) {
    if (inStream != null) {
        BufferedImage image = ImageIO.read(inStream);
        // ...
    }
}

请注意,/指的是在其上找到图像的类路径的根。另请注意,通常不应该在代码中引用src/,因为在运行时只有target文件夹可见。

还请注意,Eclipse(或IntelliJ)在正确设置时会采用maven的类路径,因此此设置还应有助于在IDE中运行测试以进行调试。