Maven执行单元测试失败 无法读取图片资源报input==null错误
解决方案
该异常本质是ImageIO.read接收的输入流为空,对应你读取的图片资源未被正确加载到测试运行的类路径中,修复步骤如下:
- 检查资源存放位置:测试专用的图片资源请放到
src/test/resources/Sprites目录下,主代码通用的资源放到src/main/resources/Sprites目录下,Maven默认只会打包这两个资源目录下的文件到类路径。 - 核对pom.xml资源配置:如果你的pom中自定义了
build.resources或build.testResources规则,确保没有排除png格式文件,参考配置如下:
<build> <!-- 主代码资源配置 --> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.png</include> <include>**/*</include> <!-- 可根据需求调整需要打包的资源类型 --> </includes> </resource> </resources> <!-- 测试代码资源配置 --> <testResources> <testResource> <directory>src/test/resources</directory> <includes> <include>**/*.png</include> </includes> </testResource> </testResources> </build>
- 修正资源加载路径:
getResourceAsStream的路径规则为:开头不带/时是相对当前类的包路径查找,开头带/时从类路径根目录查找。如果Sprites目录直接放在资源目录下,正确写法为:ImageIO.read(getClass().getResourceAsStream("/Sprites/player_1.png"))
注意路径大小写必须和实际文件完全匹配,类Unix系统对路径大小写敏感。 - 验证打包结果:执行
mvn clean test-compile后,打开target/test-classes目录,确认Sprites目录和对应的png文件存在,不存在则说明资源配置或存放路径有误。 - 额外排查:如果依然报错,可在加载资源前打印类路径根目录位置,确认资源存放路径是否正确:
System.out.println(getClass().getClassLoader().getResource("").getPath());
内容的提问来源于stack exchange,提问作者SLPRYSQUID
相关产品推荐
相关产品推荐

