Spring Boot移除基础应用测试正常,添加后遇ModelMapper依赖不满足异常
解决Spring Boot测试类导致的Unsatisfied Dependency异常
我来帮你捋捋这个问题——你遇到的Unsatisfied Dependency异常在Spring Boot测试场景里挺常见的,结合你说的「移除测试类就正常运行,添加后就报错」的情况,大概率是测试类的配置或者Spring上下文加载逻辑出了问题。先把你提供的日志片段贴出来方便参考:
相关异常日志片段:
{"@timestamp":"2018-04-23T18:10:39.421+05:30","@version":1,"message":"The following profiles are active: development","logger_name":"com.tmobile.u2.uprising.adjustment.AdjustmentApplicationTests","thread_name":"main","level":"INFO","level_value":20000,"APP_NAME":"adjustmentPublisher"} {"@timestamp":"2018-04-23T18:10:44..."}
下面是几个可能的原因和对应的解决方法:
1. 测试类的注解配置不正确
Spring Boot测试类需要正确的注解来引导Spring上下文加载,最常见的问题是@SpringBootTest的配置不对:
- 如果你的测试类和主启动类(
AdjustmentApplication)不在同一个包下,必须显式指定启动类:@SpringBootTest(classes = AdjustmentApplication.class) public class AdjustmentApplicationTests { // 测试代码 } - 另外,避免在测试类错误使用
@ContextConfiguration等注解,导致加载了不完整的上下文。
2. 测试环境缺失必要的依赖Bean
有些Bean可能只在生产/开发环境有实例化条件(比如依赖外部服务、特定数据库),但测试环境无法满足,这时候Spring就会找不到对应的Bean而报错:
- 对于外部依赖,用
@MockBean来模拟实例,比如如果你的业务类依赖了NotificationClient:@SpringBootTest public class AdjustmentApplicationTests { @MockBean private NotificationClient notificationClient; // 模拟外部依赖 @Autowired private AdjustmentService adjustmentService; // 要测试的类 // 测试方法 } - 对于内部Bean,检查是否被正确扫描:确保Bean类加了
@Service/@Repository/@Component等注解,且Spring的组件扫描范围包含该Bean所在的包。
3. 测试环境的配置文件问题
日志里显示激活了development profile,要确认测试环境是否正确加载了对应的配置:
- 在测试类上加上
@ActiveProfiles("development"),显式指定要使用的配置文件:@SpringBootTest @ActiveProfiles("development") public class AdjustmentApplicationTests { // 测试代码 } - 检查
application-development.properties(或yaml)文件,确保里面没有缺失必要的配置项(比如数据库连接、第三方服务地址等),这些配置可能是某些Bean实例化的必要条件。
额外排查建议
- 拿到完整的异常堆栈信息:你提供的日志被截断了,
UnsatisfiedDependencyException的完整堆栈会明确指出哪个Bean无法被注入,以及它依赖的哪个Bean找不到,这是定位问题最关键的信息。 - 检查测试类的包路径:如果测试类的包路径不在主启动类的扫描范围内,Spring无法自动扫描到测试需要的Bean,这时候要么调整包结构,要么在
@SpringBootTest里指定scanBasePackages属性。
内容的提问来源于stack exchange,提问作者kaviya .P
相关产品推荐
相关产品推荐

