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

建设网站用什么语言编写wordpress读取图片loading

建设网站用什么语言编写,wordpress读取图片loading,flash网站的优缺点,成都旅游景点推荐Mockito 使用注解进行单元测试详解 Mockito 提供了一系列注解来简化测试代码的编写,减少手动创建和管理 Mock 对象的样板代码。结合 JUnit 5,可以更高效地构建清晰、易维护的单元测试。 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; // 自动注入 mockUserDao@Testvoid 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 会调用被覆盖的 validateCard)boolean result = spyPaymentService.processPayment("invalid_card");assertTrue(result);verify(spyPaymentService).validateCard("invalid_card");}
}
3.3 @InjectMocks 注解

作用:自动将 @Mock@Spy 对象注入到被测类中。

注入规则

  1. 构造器注入(优先):匹配参数类型和数量。
  2. Setter 注入:调用 setter 方法。
  3. 字段注入(最后):直接反射注入字段。

示例

@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 ArgumentCaptor<EmailRequest> emailCaptor;@Testvoid sendWelcomeEmail_ShouldCaptureEmailContent() {notificationService.sendWelcomeEmail("user@example.com");verify(mockEmailClient).send(emailCaptor.capture());EmailRequest captured = emailCaptor.getValue();assertEquals("user@example.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. 最佳实践
  1. 保持测试简洁:使用注解减少手动初始化代码。
  2. 明确依赖关系:通过 @InjectMocks 明确被测类的依赖注入方式。
  3. 避免过度 Mock:仅 Mock 外部依赖,保留核心逻辑的真实性。
  4. 结合 AssertJ:使用流式断言提高测试可读性:
    assertThat(capturedEmail.getSubject()).contains("Welcome");
    

通过合理使用 Mockito 注解,可以显著提升单元测试的编写效率和可维护性。


文章转载自:

http://FI7I89NF.fwgnq.cn
http://QFaeoOke.fwgnq.cn
http://zmDg05Ge.fwgnq.cn
http://tOA265Xb.fwgnq.cn
http://s2SviZfI.fwgnq.cn
http://1Geyml7Y.fwgnq.cn
http://8z5wSbID.fwgnq.cn
http://ct40z5eC.fwgnq.cn
http://IM4FSlQY.fwgnq.cn
http://XAdwtTpq.fwgnq.cn
http://KmV2IbDV.fwgnq.cn
http://STzES4HN.fwgnq.cn
http://CKzBZTxQ.fwgnq.cn
http://cAqLxSaF.fwgnq.cn
http://rpvliGit.fwgnq.cn
http://M2SgIQ3r.fwgnq.cn
http://iud2oVJ9.fwgnq.cn
http://MzYQwgDN.fwgnq.cn
http://b39YZEQw.fwgnq.cn
http://9OBSRMnu.fwgnq.cn
http://KTkV8XMZ.fwgnq.cn
http://VYEQ2teP.fwgnq.cn
http://cAYlwL7l.fwgnq.cn
http://tsiw4cga.fwgnq.cn
http://Xr6CavTJ.fwgnq.cn
http://hXihyyP9.fwgnq.cn
http://dS5oSpJ8.fwgnq.cn
http://aEMCWmfi.fwgnq.cn
http://SHxyPPt1.fwgnq.cn
http://oIACBIu0.fwgnq.cn
http://www.dtcms.com/wzjs/702234.html

相关文章:

  • 网站开发语言哪种简单桂林漓江简介
  • 大学课程免费自学网站视频网站怎么做排名
  • 做网站的网址怎么弄徐州网站建设优化
  • 微博白菜网站怎么做中国域名备案查询系统
  • 网站友情链接与排名计算机网络基础课程
  • 马鞍山市重点工程建设管理局网站网站刷流量会怎么样
  • 用二级域名做的网站算新站吗邢台市建设局网站
  • 校友网站建设的重要性网站建设的流程推广方案
  • 做钓鱼网站获利3万佛山 做网站公司
  • 网站制作外包价格软件开发税率是13%还是6
  • 湘西泸溪网站建设建站哪个平台好
  • 重庆网站建设招聘网站建设与 维护实训报告范文
  • 网站社区的建设辽宁建设工程造价管理网站
  • 网站一般用什么架构wordpress设置用户登录
  • 济宁企业做网站苏州seo按天扣费
  • vs做网站开发安徽建设工程信息网如何复原
  • 淄博周村网站建设方案ppt排版布局
  • 国栋建设网站土木工程网官网登录
  • 农庄网站wordpress添加主题后怎么添加内容
  • 大型网站建设就找兴田德润网站建设佛山拓客科技公司
  • 文件上传到沧州建设局网站杭州网站设计公司
  • 唐山网站建设费用网站建设运行工作情况总结
  • 太原市住房和城乡建设厅网站优化网站排名方法教程
  • 个人可以做外贸网站吗用树莓派做网站服务器
  • 网站建设哪家好知道万维科技网站页面由什么构成
  • 企业网站建设哪家快长沙做网站的
  • 电子商务网站建设与管理一级建造师报名官网入口
  • 网站开发常用颜色网站同时做竞价和seo
  • 郑州网站建设网站建设房子装修价格
  • 园区网互联及网站建设昭通网站建设兼职