JUnit 5测试Spring Rest/MVC项目时无法读取resource目录下Cats.json文件
根因分析
你当前使用new File("Cats.json")的方式是基于进程运行时的工作目录查找文件,而非读取classpath下的资源文件。你主程序运行时逻辑正常,是因为主程序的运行工作目录下刚好存在该文件,这不属于标准的资源读取实现,所以在JUnit测试场景下会出现路径不匹配的问题。
解决方案
临时兼容方案
你已经验证过JUnit测试运行时的工作目录为项目根路径(和pom.xml、src目录同级),直接将Cats.json文件复制一份到该根路径下即可临时解决找不到文件的问题,该方案无需修改业务代码,但不适合长期使用。
标准优化方案
修改CatRepositoryBackupRepo类的资源读取逻辑,通过类加载器读取classpath下的资源文件,完全脱离工作目录的限制:
- 替换原有文件声明逻辑:
// 原有代码 // private File datei = new File("Cats.json"); // 替换为以下逻辑 URL resource = getClass().getClassLoader().getResource("Cats.json"); if (resource == null) { throw new RuntimeException("未找到Cats.json资源文件"); } private File datei = new File(resource.toURI());
- 确保Cats.json文件分别存放在
src/main/resources(主程序用)和src/test/resources(测试用)目录下即可,Maven默认配置会自动将这两个目录下的文件加入运行时classpath,JUnit测试时会优先读取test目录下的资源文件。
补充说明
如果修改后仍读不到文件,可检查Maven的pom.xml配置,确认是否开启了默认的资源处理逻辑,没有自定义排除resources目录下的json文件即可。
内容的提问来源于stack exchange,提问作者IngmarEckhardt
相关产品推荐
相关产品推荐

