告别 @MockBean!在 Spring Boot 3.2+ 中使用 @MockitoBean 进行单元测试
多年来,@MockBean
一直被广泛用于 Spring Boot 单元测试中来模拟依赖项。
然而,在 Spring Boot 3.2 中,@MockBean
由于性能和可维护性方面的问题已被标记为废弃。
🔴 @MockBean
存在的问题
✔ 创建不必要的 Spring 上下文代理 → 拖慢测试执行速度
✔ 全局模拟 Bean → 可能在多个测试中产生副作用
✔ 未针对 Spring Boot 3.2 的测试改进进行优化
✅ 解决方案:使用 @MockitoBean
Spring Boot 3.2 引入了 @MockitoBean
,它提供了:
✔ 更快的测试执行速度 - 直接集成 Mockito
✔ 更好的测试组件隔离
✔ 更可靠的单元测试体验
1️⃣ 什么是 @MockitoBean
?
@MockitoBean
是 Spring Boot 3.2 中的一个新注解,它是 @MockBean
的直接替代品。
✔ 它为依赖项创建模拟实例
✔ 它与 JUnit 5 和 Mockito 有更好的集成
✔ 它不需要完整的 Spring 上下文重新加载
2️⃣ 将 @MockBean
替换为 @MockitoBean
让我们通过一个在服务测试中模拟存储库的示例来演示。
📝 示例 1:使用 @MockBean
的旧方法(已废弃)
@SpringBootTest
class UserServiceTest {@MockBean // ❌ 在 Spring Boot 3.2+ 中已废弃private UserRepository userRepository;@Autowiredprivate UserService userService;@Testvoid testGetUserById() {User mockUser = new User(1L, "张三");