java - 如何更改特定 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 运行测试以及手动进行调试。
解决方案
默认情况下,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 中运行测试以进行调试。
推荐阅读
- r - 无法使用 gs_ls 函数读取 R 中的谷歌表格?
- youtube-api - 如何从 YouTube API 获取播放列表的标题
- c# - 如何设置托管线程的处理器亲和性?
- nlp - 如何将 LIWC 类别映射到具有相关系数分数的人格特征(例如 big5)?
- python - ruamel yaml 转储不是用引号转义字符串
- flutter - 获取 didExceedMaxLines 上的最后一个字符
- android - Flying/Floating/Bubbling Hearts动画的简单实现
- css - toHaveStyles 不使用带有 Jest 的 React 测试库的 module.css 样式
- android - 新版本的 kotlinx-coroutines-play-services 在我的代码中出现问题
- postgresql - 无法启动 potgresql 服务