【问题标题】:How to change junit relative resource path for specific maven module?如何更改特定 maven 模块的 junit 相对资源路径?
【发布时间】:2019-04-27 09:36:52
【问题描述】:

我有以下项目结构(projectmodule 都包含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 运行测试以及手动调试。

【问题讨论】:

标签: java maven junit


【解决方案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 中运行测试以进行调试。

【讨论】:

  • 谢谢,但还是不行。我怀疑它与配置设置有关。我有以下用于 java 构建路径的源文件夹:project/module/src/main/javaproject/module/src/test/java。你认为这些是正确的吗?
  • 所有这些设置都应该是 maven 中的标准设置。当您直接从 maven 运行测试时,它是否有效?
  • 如果它在 maven 中工作但在 Eclipse 中不工作,这可能意味着您没有告诉 Eclipse 它应该将此项目视为 maven 项目,并且它应该从 pom 中学习所有依赖项和设置文件。我认为this question 可以帮助您在 Eclipse 中正确设置 maven 性质。
  • 我现在在 IntelliJ 中尝试了它,它可以工作哈哈。不知道为什么这在 Eclipse 中如此困难。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2015-08-29
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多