多模块Spring Boot项目中如何测试带嵌入式H2数据库的Repository
解决多模块Spring Boot项目Core模块Repository测试找不到配置的问题
问题原因
@DataJpaTest属于Spring Boot测试切片注解,默认会在当前模块的包路径下寻找带@SpringBootConfiguration(通常就是标注@SpringBootApplication的主类)的配置类,但你的core模块没有这类配置(配置集中在api模块),因此触发找不到配置的报错。
解决方案一:指定API模块的主配置类
直接在测试类的@DataJpaTest注解中指定api模块的主类,让测试上下文加载正确的配置:
@ExtendWith(SpringExtension.class) @DataJpaTest(classes = ApiApplication.class) // 替换为你api模块中实际的主类名 public class NaceRepositoryTest { @Autowired private NaceRepository repository; // 原有测试方法不变 }
也可以通过@ContextConfiguration注解单独指定配置类:
@ExtendWith(SpringExtension.class) @DataJpaTest @ContextConfiguration(classes = ApiApplication.class) public class NaceRepositoryTest { // 原有测试代码不变 }
解决方案二:创建Core模块专属的测试配置类
如果希望core模块的测试不依赖api模块的配置,可以在core模块的测试目录下创建一个独立的配置类:
在src/test/java下新增配置类:
@SpringBootConfiguration @EnableJpaRepositories(basePackages = "com.yourcompany.core.repository") // 替换为你的Repository所在包路径 @EntityScan(basePackages = "com.yourcompany.core.entity") // 替换为你的实体类所在包路径 @EnableAutoConfiguration public class CoreTestConfig { }
然后修改测试类,使用这个专属配置:
@ExtendWith(SpringExtension.class) @DataJpaTest(classes = CoreTestConfig.class) public class NaceRepositoryTest { // 原有测试代码不变 }
额外说明
你在core模块测试资源目录下创建的data.sql和application.properties会被测试上下文自动识别并加载,无需额外配置。
内容的提问来源于stack exchange,提问作者paymer
相关产品推荐
相关产品推荐

