我具有以下项目结构(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以及手动调试来运行测试。
答案 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中运行测试以进行调试。