Spring Boot集成测试中OptaPlanner的SolverManager Bean缺失如何解决
问题根因
该问题本质是测试场景下Spring上下文没有触发OptaPlanner的自动配置逻辑,导致对应泛型的SolverManager Bean没有被初始化。
最佳实践方案
- 方案1:全量集成测试用标准注解
如果你的测试是完整的服务集成测试,直接在测试类上添加@SpringBootTest注解即可,该注解会加载所有starter的自动配置类,包括optaplanner-spring-boot-starter自带的OptaPlannerAutoConfiguration,会自动扫描标注了@PlanningSolution的类,生成对应泛型的SolverManager Bean。 - 方案2:切片测试场景手动导入自动配置
如果你用的是@WebMvcTest、@DataJpaTest这类切片测试注解,只需要加载部分Spring上下文,可在测试类上添加@Import(OptaPlannerAutoConfiguration.class)注解,无需手动注册SolverManager,即可触发OptaPlanner的自动装配逻辑。 - 方案3:单元测试场景直接Mock
如果你的测试是单元测试,不需要真实运行规划求解逻辑,直接在测试类中添加@MockBean注解修饰SolverManager字段,Mock对象会直接注入到依赖的Bean中,不需要触发自动装配。
必要校验项
- 确认你的
EngagementSolution类上已经添加了@PlanningSolution注解,这是OptaPlanner自动识别解决方案类、生成对应SolverManager的必要前提 - 确认测试类的包路径和主启动类的包路径一致,或者在
@SpringBootTest注解中通过classes属性指定主启动类,避免自动配置扫描失效
内容的提问来源于stack exchange,提问作者Paul C
相关产品推荐
相关产品推荐

