无Spring Boot主类项目中测试Spring Data Repository问题求助
解决无Spring Boot启动类的Repository测试问题
嘿,我来帮你搞定这个测试问题!你的代码里有几个明显的冲突点,导致测试跑不起来,我一步步给你拆解:
问题根源
- @SpringBootTest的依赖:这个注解默认会去扫描当前包或子包下的
@SpringBootApplication启动类来初始化Spring上下文,但你的项目根本没有这个类,自然会加载失败。 - 注解冲突:
@DataJpaTest本身就是专门为测试JPA Repository设计的注解,它会自动配置EntityManager、内存数据库等必要组件,完全不需要再搭配@SpringBootTest,两个一起用反而会造成配置混乱。 - TestNG集成冗余:继承
AbstractTestNGSpringContextTests是TestNG老的集成Spring的方式,但用Spring Boot的测试注解时,这个继承其实不是必须的,Spring Boot已经做好了兼容。
修正后的测试代码
假设你的项目里有一个JpaConfig配置类(包含@EnableJpaRepositories、@EntityScan以及数据源、JPA相关配置),那测试类可以改成这样:
@DataJpaTest @ContextConfiguration(classes = {JpaConfig.class}) // 指定你的自定义配置类 public class TaskRepositoryTest { @Autowired private TaskRepository taskRepository; @Test public void testSaveTask() { // 保存任务并验证结果 Task savedTask = taskRepository.save(new Task("open")); // 加几个断言让测试更严谨 Assert.assertNotNull(savedTask.getId()); Assert.assertEquals(savedTask.getStatus(), "open"); } }
额外注意事项
- 数据库配置:如果你的
JpaConfig里已经配置了测试用的数据源(比如H2内存库),那直接用就行;如果没配置,@DataJpaTest会自动帮你配置一个H2内存数据库,只要你在测试依赖里加了H2的包。 - 依赖配置:确保你的构建文件里有正确的TestNG和Spring Boot测试依赖,比如Maven的配置:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <scope>test</scope> </dependency>
这样调整后,你的Repository测试应该就能正常跑起来啦!
内容的提问来源于stack exchange,提问作者Manuelarte
相关产品推荐
相关产品推荐

