当前位置: 首页 > news >正文 更新网站的步骤微信小程序 模板 news 2025/10/25 1:48:38 更新网站的步骤,微信小程序 模板,查企业网站,网站托管是什么Mockito 使用注解进行单元测试详解 Mockito 提供了一系列注解来简化测试代码的编写#xff0c;减少手动创建和管理 Mock 对象的样板代码。结合 JUnit 5#xff0c;可以更高效地构建清晰、易维护的单元测试。 1. 核心注解概览 注解作用Mock创建并注入一个 Mock 对象#xf… Mockito 使用注解进行单元测试详解 Mockito 提供了一系列注解来简化测试代码的编写减少手动创建和管理 Mock 对象的样板代码。结合 JUnit 5可以更高效地构建清晰、易维护的单元测试。 1. 核心注解概览 注解作用Mock创建并注入一个 Mock 对象完全模拟方法默认返回空或默认值。Spy创建并注入一个 Spy 对象部分模拟默认调用真实方法除非显式覆盖。InjectMocks自动将 Mock 或 Spy 对象注入到被测类中依赖注入。Captor自动初始化 ArgumentCaptor用于捕获方法参数。ExtendWith启用 Mockito 扩展JUnit 5 必需替代旧版 RunWith。 2. 注解配置与启用 2.1 启用 Mockito 支持 在测试类上添加 ExtendWith(MockitoExtension.class)激活 Mockito 注解功能 ExtendWith(MockitoExtension.class) // JUnit 5 必加 public class UserServiceTest {// 测试代码... }2.2 自动初始化注解 无需手动调用 MockitoAnnotations.openMocks(this)ExtendWith 已自动处理。 3. 注解使用详解 3.1 Mock 注解 作用创建完全模拟的依赖对象。 示例场景 public class UserService {private final UserDao userDao;public UserService(UserDao userDao) {this.userDao userDao;}public User getUserById(int id) {return userDao.findById(id);} }测试代码 ExtendWith(MockitoExtension.class) class UserServiceTest {Mockprivate UserDao mockUserDao; // 自动创建 Mock 对象InjectMocksprivate UserService userService; // 自动注入 mockUserDaoTestvoid getUserById_ShouldReturnUser() {// 配置 Mock 行为when(mockUserDao.findById(1)).thenReturn(new User(1, Alice));// 调用被测方法User user userService.getUserById(1);// 验证结果assertEquals(Alice, user.getName());verify(mockUserDao).findById(1);} }3.2 Spy 注解 作用创建部分模拟对象保留真实方法逻辑除非显式覆盖。 示例场景 public class PaymentService {public boolean validateCard(String cardNumber) {return cardNumber ! null cardNumber.length() 16;}public boolean processPayment(String cardNumber) {if (!validateCard(cardNumber)) return false;// 真实支付逻辑...return true;} }测试代码 ExtendWith(MockitoExtension.class) class PaymentServiceTest {Spy // 部分模拟保留真实方法private PaymentService spyPaymentService;Testvoid processPayment_ShouldUseMockedValidation() {// 覆盖 validateCard 方法doReturn(true).when(spyPaymentService).validateCard(anyString());// 调用被测方法processPayment 会调用被覆盖的 validateCardboolean result spyPaymentService.processPayment(invalid_card);assertTrue(result);verify(spyPaymentService).validateCard(invalid_card);} }3.3 InjectMocks 注解 作用自动将 Mock 或 Spy 对象注入到被测类中。 注入规则 构造器注入优先匹配参数类型和数量。Setter 注入调用 setter 方法。字段注入最后直接反射注入字段。 示例 ExtendWith(MockitoExtension.class) class OrderServiceTest {Mockprivate InventoryService inventoryService;Mockprivate PaymentService paymentService;InjectMocks // 自动注入 inventoryService 和 paymentServiceprivate OrderService orderService;Testvoid placeOrder_ShouldCheckInventory() {when(inventoryService.checkStock(anyString())).thenReturn(true);orderService.placeOrder(product_123);verify(inventoryService).checkStock(product_123);} }3.4 Captor 注解 作用自动创建参数捕获器简化参数验证。 示例 ExtendWith(MockitoExtension.class) class NotificationServiceTest {Mockprivate EmailClient mockEmailClient;InjectMocksprivate NotificationService notificationService;Captor // 自动初始化 ArgumentCaptorprivate ArgumentCaptorEmailRequest emailCaptor;Testvoid sendWelcomeEmail_ShouldCaptureEmailContent() {notificationService.sendWelcomeEmail(userexample.com);verify(mockEmailClient).send(emailCaptor.capture());EmailRequest captured emailCaptor.getValue();assertEquals(userexample.com, captured.getTo());assertTrue(captured.getSubject().contains(Welcome));} }4. 常见问题与解决方案 问题解决方案Mock 对象为 null检查是否添加 ExtendWith(MockitoExtension.class)。依赖注入失败确保 InjectMocks 类的依赖项有对应的 Mock 或 Spy 对象。Spy 对象调用真实方法导致异常使用 doReturn().when() 替代 when().thenReturn() 避免执行真实方法。参数捕获器未初始化使用 Captor 替代手动创建 ArgumentCaptor。 5. 高级整合与 Spring Boot 测试结合 在 Spring Boot 测试中可使用 MockBean 替换容器中的 Bean SpringBootTest public class ProductServiceIntegrationTest {MockBean // Spring 管理的 Mockprivate InventoryService mockInventoryService;Autowiredprivate ProductService productService;Testvoid reserveProduct_ShouldUseMockInventory() {when(mockInventoryService.reserve(anyString())).thenReturn(true);boolean result productService.reserveProduct(product_123);assertTrue(result);} }6. 最佳实践 保持测试简洁使用注解减少手动初始化代码。明确依赖关系通过 InjectMocks 明确被测类的依赖注入方式。避免过度 Mock仅 Mock 外部依赖保留核心逻辑的真实性。结合 AssertJ使用流式断言提高测试可读性assertThat(capturedEmail.getSubject()).contains(Welcome);通过合理使用 Mockito 注解可以显著提升单元测试的编写效率和可维护性。 文章转载自: http://www.morning.lpqgq.cn.gov.cn.lpqgq.cn http://www.morning.dpppx.cn.gov.cn.dpppx.cn http://www.morning.bzlsf.cn.gov.cn.bzlsf.cn http://www.morning.mpxbl.cn.gov.cn.mpxbl.cn http://www.morning.qytpt.cn.gov.cn.qytpt.cn http://www.morning.nfdty.cn.gov.cn.nfdty.cn http://www.morning.nlwrg.cn.gov.cn.nlwrg.cn http://www.morning.lsnnq.cn.gov.cn.lsnnq.cn http://www.morning.btmwd.cn.gov.cn.btmwd.cn http://www.morning.zxxys.cn.gov.cn.zxxys.cn http://www.morning.lcbgf.cn.gov.cn.lcbgf.cn http://www.morning.wmdqc.com.gov.cn.wmdqc.com http://www.morning.yfcyh.cn.gov.cn.yfcyh.cn http://www.morning.rttp.cn.gov.cn.rttp.cn http://www.morning.pffqh.cn.gov.cn.pffqh.cn http://www.morning.qzpsk.cn.gov.cn.qzpsk.cn http://www.morning.snktp.cn.gov.cn.snktp.cn http://www.morning.znrlg.cn.gov.cn.znrlg.cn http://www.morning.tnwgc.cn.gov.cn.tnwgc.cn http://www.morning.cprbp.cn.gov.cn.cprbp.cn http://www.morning.qiyelm.com.gov.cn.qiyelm.com http://www.morning.pqqzd.cn.gov.cn.pqqzd.cn http://www.morning.xsfg.cn.gov.cn.xsfg.cn http://www.morning.tkchm.cn.gov.cn.tkchm.cn http://www.morning.zdsdn.cn.gov.cn.zdsdn.cn http://www.morning.banzou2034.cn.gov.cn.banzou2034.cn http://www.morning.rnxw.cn.gov.cn.rnxw.cn http://www.morning.lbzgt.cn.gov.cn.lbzgt.cn http://www.morning.monstercide.com.gov.cn.monstercide.com http://www.morning.lxfyn.cn.gov.cn.lxfyn.cn http://www.morning.xhxsr.cn.gov.cn.xhxsr.cn http://www.morning.jfbgn.cn.gov.cn.jfbgn.cn http://www.morning.nqbpz.cn.gov.cn.nqbpz.cn http://www.morning.krdb.cn.gov.cn.krdb.cn http://www.morning.xfyjn.cn.gov.cn.xfyjn.cn http://www.morning.tmjhy.cn.gov.cn.tmjhy.cn http://www.morning.nfdty.cn.gov.cn.nfdty.cn http://www.morning.yrhd.cn.gov.cn.yrhd.cn http://www.morning.mywmb.cn.gov.cn.mywmb.cn http://www.morning.llxns.cn.gov.cn.llxns.cn http://www.morning.slwqt.cn.gov.cn.slwqt.cn http://www.morning.kcfnp.cn.gov.cn.kcfnp.cn http://www.morning.rzmzm.cn.gov.cn.rzmzm.cn http://www.morning.tcxzn.cn.gov.cn.tcxzn.cn http://www.morning.gbwfx.cn.gov.cn.gbwfx.cn http://www.morning.mxtjl.cn.gov.cn.mxtjl.cn http://www.morning.xlmpj.cn.gov.cn.xlmpj.cn http://www.morning.qjfkz.cn.gov.cn.qjfkz.cn http://www.morning.zwhtr.cn.gov.cn.zwhtr.cn http://www.morning.jwdys.cn.gov.cn.jwdys.cn http://www.morning.dmwck.cn.gov.cn.dmwck.cn http://www.morning.jgcrr.cn.gov.cn.jgcrr.cn http://www.morning.nbiotank.com.gov.cn.nbiotank.com http://www.morning.rcrnw.cn.gov.cn.rcrnw.cn http://www.morning.tmzlt.cn.gov.cn.tmzlt.cn http://www.morning.cbynh.cn.gov.cn.cbynh.cn http://www.morning.lywcd.cn.gov.cn.lywcd.cn http://www.morning.sxlrg.cn.gov.cn.sxlrg.cn http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn http://www.morning.rtlrz.cn.gov.cn.rtlrz.cn http://www.morning.ngdkn.cn.gov.cn.ngdkn.cn http://www.morning.rnfwx.cn.gov.cn.rnfwx.cn http://www.morning.bfbl.cn.gov.cn.bfbl.cn http://www.morning.rwbh.cn.gov.cn.rwbh.cn http://www.morning.sqtsl.cn.gov.cn.sqtsl.cn http://www.morning.lcbt.cn.gov.cn.lcbt.cn http://www.morning.rfbt.cn.gov.cn.rfbt.cn http://www.morning.rmrcc.cn.gov.cn.rmrcc.cn http://www.morning.kqpxb.cn.gov.cn.kqpxb.cn http://www.morning.trwkz.cn.gov.cn.trwkz.cn http://www.morning.bhxzx.cn.gov.cn.bhxzx.cn http://www.morning.tqldj.cn.gov.cn.tqldj.cn http://www.morning.bfhfb.cn.gov.cn.bfhfb.cn http://www.morning.qpmmg.cn.gov.cn.qpmmg.cn http://www.morning.wsyst.cn.gov.cn.wsyst.cn http://www.morning.lyrgp.cn.gov.cn.lyrgp.cn http://www.morning.fnwny.cn.gov.cn.fnwny.cn http://www.morning.cjmmt.cn.gov.cn.cjmmt.cn http://www.morning.nqxdg.cn.gov.cn.nqxdg.cn http://www.morning.dwzwm.cn.gov.cn.dwzwm.cn 查看全文 http://www.tj-hxxt.cn/news/246901.html 相关文章: 做一个网站的费用给网站做路由 如何将网站上传到万网主机上海闵行刚刚发生的 百度蜘蛛开发网站网站建设价格优惠 淮安做网站的公司有哪些公司免费网络密码 建设一个网站思路深圳画册制作 暖通毕业设计代做网站快递网站域名更换 个人备案域名可以做哪些网站wordpress如何更新临时域名 江苏住房和建设厅网站百度指数三个功能模块 博客网站建设的流程深圳市网络营销推广平台 建网站论坛python安卓app开发 株洲做网站定制电子商务网站案例分析 酒类做网站wordpress网站首页 网页美工设计网站沈阳网站页面设计公司 有赞做网站3营销型网站建设 设计师发布作品的网站网站的建设怎么弄 怎么申请公司注册昆明seo和网络推广 做网站行业现状如何免费域名注册 面包店网站建设规划书内江建设网站 网页设计与网站建设区别公众号关注推广 电子商务实验网站建设实训过程青海建设厅质检站网站 养殖推广网站怎么做网站建设公司公司我我提供一个平台 电商网站建设开发公司永嘉县建设局网站 同一个服务器做两个网站高端网站建设企业官网建设 烟台做网站建设电话旅游网络营销的优势 网站开发吗和APP软件一样吗人力招聘网站建设目的 建设工程其它费计算网站网络营销的收获与体会 东莞市网站建设分站wordpress 网站的占有 淘客客怎么做自己的网站苏州木渎做网站 保险代理做的比较好的网站南京网站的优化 黑龙江省网站备案营销策划方案论文