Spring Boot Repository单元测试启动失败求助
问题排查与解决
核心原因
当前异常是因为@DataJpaTest注解默认会尝试用嵌入式数据库替换应用的数据源,但项目测试依赖中未引入支持的嵌入式数据库,或者你需要使用真实数据库进行测试。
解决方案
方案1:添加嵌入式数据库依赖(推荐单元测试场景)
在项目构建文件中加入嵌入式数据库(如H2)的测试依赖,Spring Boot会自动配置它作为测试数据源:
Maven(pom.xml)
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>test</scope> </dependency>
Gradle(build.gradle)
testImplementation 'com.h2database:h2'
添加后,测试启动时Spring Boot会自动初始化H2数据库,无需额外配置。
方案2:使用应用配置的真实数据库测试
如果希望直接用项目中配置的数据源(如MySQL、PostgreSQL)做测试,修改测试类注解,关闭嵌入式数据库替换逻辑:
@DataJpaTest @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) class OptionRepositoryTest { @Autowired private OptionRepository underTest; // 测试方法... }
注意:这种方式需要确保测试环境数据库可用,且测试数据不会污染生产数据。
额外检查点
- 确认实体类构造函数与JPQL查询的字段顺序一致:你的
findAllEn()查询使用的构造函数是Option(String name_en, Long id, String imgDesc_en, byte[] imgSrc),需保证参数顺序和JPQL中的c.name_en,c.id,c.imgDesc_en,c.imgSrc完全匹配,避免后续查询出现字段映射错误。
内容的提问来源于stack exchange,提问作者Pertsh Galstyan
相关产品推荐
相关产品推荐

