《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之编写流程(6)

简介: 《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之编写流程(6)

八、 验证依赖方法

 

在单元测试中,验证是确认模拟的依赖方法是否按照预期被调用或未调用的过程。Mockito提供了许多方法来验证依赖方法调用,给我们编写单元测试用例带来了很大的帮助。

 

1. 根据参数验证方法调用

 

1) 验证无参数方法调用

 

image.png 

 

2) 验证指定参数方法调用

 

image.png 

 

3) 验证任意参数方法调用

 

image.png 

 

4) 验证可空参数方法调用

 

image.png 

 

5) 验证必空参数方法调用

 

image.png 

 

6) 验证可变参数方法调用

 

对于一些变长度参数方法,可以按实际参数个数进行验证:

 

image.png 

 

也可以用Mockito.any()进行通用验证

 

image.png 

 

2. 验证方法调用次数

 

1) 验证方法默认调用1次

 

 image.png

 

2) 验证方法从不调用

 

image.png 

 

3) 验证方法调用n次

 

image.png 

 

4) 验证方法调用至少1次

 

image.png

 

5) 验证方法调用至少n次

 

image.png 

 

6) 验证方法调用最多1次

 

image.png 

 

7) 验证方法调用最多n次

 

image.png

 

8) 验证方法调用指定n次

 

Mockito允许按顺序进行验证方法调用,未被验证到的方法调用将不会被标记为已验证。

 

image.png

 

9) 验证对象及其方法调用1次

 

用于验证对象及其方法调用1次,如果该对象还有别的方法被调用或者该方法调用了多次,都将导致验证方法调用失败。

 

image.png

 

相当于:

 

image.png

 

3. 验证方法调用并捕获参数值

 

Mockito提供ArgumentCaptor类来捕获参数值,通过调用forClass(Class<T> clazz)方法来构建一个ArgumentCaptor对象,然后在验证方法调用时来捕获参数,最后获取到捕获的参数值并验证。如果一个方法有多个参数都要捕获并验证,那就需要创建多个ArgumentCaptor对象。

 

ArgumentCaptor的主要接口方法

 

capture方法,用于捕获方法参数;

getValue方法,用于获取捕获的参数值,如果捕获了多个参数值,该方法只返回最后一个参数值;

getAllValues方法,用户获取捕获的所有参数值。

 

1) 使用ArgumentCaptor.forClass方法定义参数捕获器

 

在测试用例方法中,直接使用ArgumentCaptor.forClass方法定义参数捕获器。

 

image.png

 

注意

定义泛型类的参数捕获器时,存在强制类型转换,会引起编译器警告。

 

2) 使用@Captor注解定义参数捕获器

 

也可以用Mockito提供的@Captor注解,在测试用例类中定义参数捕获器。

 

image.png

 

注意

定义泛型类的参数捕获器时,由于是Mockito自行初始化,不会引起编译器警告。

 

 

3) 捕获多次方法调用的参数值列表

 

image.png

 

4. 验证其它特殊方法

 

1) 验证final方法调用

 

final方法的验证跟普通方法类似,这里不再累述。

 

2) 验证私有方法调用

 

PowerMockito提供verifyPrivate方法验证私有方法调用。

 

image.png

 

3) 验证构造方法调用

 

PowerMockito提供verifyNew方法验证构造方法调用。

 

image.png 

 

4) 验证静态方法调用

 

PowerMockito提供verifyStatic方法验证静态方法调用。

 

image.png

 

 

相关文章
|
2月前
|
架构师 前端开发 Java
Java开发工程师的职业规划应该是什么样的?
Java开发工程师的职业规划涵盖多个阶段,包括初入行业(0-1年)、技能提升(1-3年)、技术专家(3-5年)及管理或专家路线选择(5年以上)。各阶段设定了明确的技能要求与职业目标,从掌握Java基础、常用框架到深入研究高级技术、微服务架构乃至担任管理职务或成为技术专家。通过持续学习与实践,结合个人兴趣,Java工程师可在技术或管理领域找到合适的发展方向,最终实现职业成功。
320 83
|
2月前
|
设计模式 架构师 Java
Java开发工程师转架构师需要学习什么
Java开发工程师转型为架构师需掌握多项技能:精通Java及框架、数据库与分布式系统;熟悉设计模式与架构模式;积累项目经验;提升沟通与领导力;持续学习新技术;培养系统设计与抽象能力;了解中间件及开发工具;并注重个人特质与职业发展。具体路径应结合个人目标与实际情况制定。
62 18
|
2月前
|
人工智能 前端开发 Java
Java开发工程师转哪个行业比较好?
Java开发工程师转哪个行业比较好?
207 2
|
3月前
|
人工智能 自然语言处理 Java
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
文章介绍了Spring AI,这是Spring团队开发的新组件,旨在为Java开发者提供易于集成的人工智能API,包括机器学习、自然语言处理和图像识别等功能,并通过实际代码示例展示了如何快速集成和使用这些AI技术。
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
|
2月前
|
小程序 前端开发 JavaScript
Java开发工程师转小程序开发的前景如何?
Java开发工程师转小程序开发的前景如何?
43 0
|
3月前
|
Java 测试技术 API
Java 新手入门:Java单元测试利器,Mock详解
Java 新手入门:Java单元测试利器,Mock详解
155 1
|
3月前
|
Java 测试技术
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
37 0
|
4月前
|
IDE Java 测试技术
Java面试题:什么是Java中的单元测试以及如何编写单元测试?
Java面试题:什么是Java中的单元测试以及如何编写单元测试?
149 1
|
3月前
|
Java 测试技术 API
深入理解单元测试:JUnit框架在Java中的应用
【8月更文挑战第3天】本文将引导读者通过JUnit框架的镜头,探索单元测试的奥秘。我们将一起揭开单元测试的神秘面纱,了解其在软件开发中的关键作用,并具体学习如何在Java项目中应用JUnit进行有效的单元测试。文章不仅会涉及理论概念,还将通过具体的代码示例,展示如何编写和运行单元测试,以确保软件质量。让我们开始吧,一起踏上这段提升代码质量和开发效率的旅程。
43 0
|
4月前
|
Java
图解java工程师学习路线
图解java工程师学习路线
212 0