深入理解 Spring 单元测试:@SpringBootTest、@Value 注入、@MockBean 使用实战与陷阱
Spring 是目前最流行的 Java 企业级开发框架之一,而良好的单元测试是高质量代码的重要保障。尤其在实际开发中,我们经常会碰到诸如 @Autowired
空指针、Nacos 配置项 @Value
注入失败、Mapper 测试困难等问题。
本文将围绕 Spring 单元测试的完整体系,结合以下关键要点进行讲解:
@SpringBootTest
的作用与最佳实践@Autowired
注入空指针的常见原因与解决@Value
注入 Nacos 配置失败的处理方式- Mapper 接口的测试注意事项
@MockBean
与@Mock
的区别与使用场景
一、@SpringBootTest:让测试运行在完整 Spring 容器中
✅ 作用
@SpringBootTest
是 Spring Boot 提供的集成测试注解,启动完整的 Spring 容器,可自动加载配置文件、注入 Bean、连接数据库等。
@SpringBootTest
class UserServiceTest {@Autowiredprivate UserService userService;@Testvoid testSave() {userService.save(...);}
}
@SpringBootTest注解支持通过 properties 属性传递内联配置,这在测试时临时覆盖@Value 注入的配置项非常实用。你可以在测试类上写:
@SpringBootTest(properties = {"key1=value1","key2=value2"
})
这相当于在测试环境下动态注入配置项,优先级高于 application.properties/application.yml。此处的配置通常与@Value 注解搭配使用。
假设在你的代码中有这样的字段
@Value("${key3}")
private List<String> valueList;
在测试类中,可以这样注入对应值:
@SpringBootTest(properties