首页 > 解决方案 > 如何更改特定 maven 模块的 junit 相对资源路径?

问题描述

我有以下项目结构(两者都project包含module文件pom.xml):

图片

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

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

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

然后我将其作为文件读入,使用

BufferedImage image = ImageIO.read(new File(IMG_PATH));

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

图片

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

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

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

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

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

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

标签: javamavenjunit

解决方案


默认情况下,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 中运行测试以进行调试。


推荐阅读