当前位置: 首页 > news >正文

单元测试MockitoExtension和SpringExtension

1. MockitoExtension

MockitoExtension 是 JUnit 5 提供的一个扩展,用于支持 Mockito 的集成。它可以自动初始化标记为 @Mock@InjectMocks 等的 Mockito 对象,而不需要显式调用 MockitoAnnotations.initMocks(this)

主要特点:
  • 自动初始化 @Mock@Spy@InjectMocks 等注解的 Mockito 对象。
  • 可以在单元测试中使用 Mockito 的模拟对象和行为。
使用场景:
  • 单元测试:当你需要使用 Mockito 来模拟对象(mock)或者对某些对象的行为进行验证时,MockitoExtension 非常适用。通常用于没有依赖 Spring 容器的独立单元测试。
  • 模拟外部依赖:测试一个类时,如果该类依赖于外部服务或组件,可以使用 Mockito 模拟这些外部服务,以便集中测试目标类的逻辑。
@ExtendWith(MockitoExtension.class) // 启用 Mockito 扩展
public class MyServiceTest {@Mockprivate MyRepository myRepository; // 模拟 MyRepository@InjectMocksprivate MyService myService; // 将模拟的 myRepository 注入到 MyService 中@Testvoid testServiceMethod() {// 模拟行为when(myRepository.getData()).thenReturn("Mocked Data");// 测试服务方法String result = myService.getData();// 验证结果assertEquals("Mocked Data", result);}
}

2. SpringExtension

SpringExtension 是 JUnit 5 提供的一个扩展,用于 将 Spring TestContext Framework 集成到 JUnit 5 中。它使得 Spring 能够在 JUnit 5 测试生命周期中自动管理 Spring 应用上下文。

主要特点:
  • 支持 Spring 的依赖注入:通过 @Autowired 注解将 Spring 容器中的 Bean 注入到测试类中。
  • 可以使用 @SpringBootTest@WebMvcTest 等注解来启动 Spring 上下文,并进行集成测试。
  • 支持 事务管理配置文件注入Spring MVC 测试 等功能。
  • 依赖注入与应用上下文:通过 Spring 容器管理测试中的对象。
使用场景:
  • 集成测试:适用于需要测试整个 Spring 应用上下文或部分组件(如控制器、服务等)是否正确工作时,尤其是当应用依赖于 Spring 的上下文和容器时。
  • 测试带有 Spring 注解的类:如 @Autowired@Service@Repository 等,需要依赖 Spring 配置的 Bean。
  • 数据库测试、Web 层测试:集成测试可能需要使用数据库、Web 服务等,而这些通常在 Spring 上下文中进行配置。
@ExtendWith(SpringExtension.class) // 启用 Spring 扩展
@SpringBootTest // 启动整个 Spring 上下文
public class MyServiceIntegrationTest {@Autowiredprivate MyService myService; // 注入 MyService Bean@Testvoid testServiceMethod() {// 测试服务方法String result = myService.getData();// 验证结果assertNotNull(result);}
}
特性MockitoExtensionSpringExtension
主要作用支持 Mockito 对象的模拟和初始化。支持 Spring 上下文管理和依赖注入。
测试类型单元测试(不依赖 Spring 上下文)。集成测试(需要 Spring 上下文)。
依赖注入支持通过 @Mock、@InjectMocks 等注解提供 Mockito 的模拟对象。通过 @Autowired 提供 Spring Bean 的依赖注入。
适用场景测试类的单独行为,模拟外部依赖。测试带有 Spring 管理的 Bean,集成测试。
启动 Spring 上下文不需要启动 Spring 上下文。启动 Spring 上下文并注入相关 Bean。
常用注解@Mock, @InjectMocks@SpringBootTest, @WebMvcTest, @DataJpaTest 等
适合测试的对象只关注单元功能,不依赖 Spring 配置或上下文。需要与 Spring 上下文或容器交互的功能。

总结

  • MockitoExtension:适用于 单元测试,专注于模拟和验证类的行为,通常不涉及 Spring 上下文。它简化了 Mockito 的使用。
  • SpringExtension:适用于 集成测试,支持在测试中使用 Spring 容器和依赖注入,通常用于测试与 Spring 上下文交互的组件。
http://www.lryc.cn/news/518376.html

相关文章:

  • 网络安全 | WAF防护开通流程与技术原理详解
  • 模型 断裂点理论(风险控制)
  • 02.MPLS动态LSP配置实验
  • MySQL 中的Buffer Pool
  • 修复微pe系统uefi引导损坏windows failed to start...
  • 【Vue3中使用crypto-js】crypto-js加密解密用法
  • JavaWeb开发(九)JSP技术
  • PADS Lyout布局布线实战技巧:布线优化及解决碎铜问题
  • 上下游服务间解耦的技术与管理
  • 如何解决HTML和CSS相关的问题,什么情况下会导致元素被遮挡?
  • Infineon PSoC 4 CapSense ModusToolbox IDE - 系统生态篇
  • [算法]布隆过滤器
  • 基于云效 Windows 构建环境和 Nuget 制品仓库进行 .Net 应用开发
  • Backend - C# asp .net core
  • 【合作原创】使用Termux搭建可以使用的生产力环境(九)
  • 使用Supervisor在Ubuntu中实现后台自启动服务
  • AIDD-人工智能药物设计-人工智能驱动的罕见病药物发现
  • 安卓硬件加速hwui
  • TDv2:一种用于离线数学表达式识别的新型树形结构解码器
  • Golang学习笔记_23——error补充
  • 邯郸地标美食导游平台的设计与实现
  • 滑动窗口限流算法:基于Redis有序集合的实现与优化
  • Angular 最新版本和 Vue 对比完整指南
  • DAY39|动态规划Part07|LeetCode:198.打家劫舍、213.打家劫舍II、337.打家劫舍III
  • MYSQL----------------sql 优化
  • 深度学习中的正则化方法
  • 前端报告 2024:全新数据,深度解析未来趋势
  • 计算机网络之---子网划分与IP地址
  • 计算机网络 (31)运输层协议概念
  • 代码随想录算法训练营day28