《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

 

 

相关文章
|
搜索推荐 算法 Java
2025 年互联网大厂校园招聘 JAVA 工程师笔试题及备考要点解析
本文针对互联网大厂校招Java工程师笔试题进行解析,涵盖基础知识、面向对象编程、数据结构与算法、异常处理及集合框架等核心内容。从数据类型、运算符到流程控制语句,从类与对象、继承多态到数组链表、排序算法,再到异常捕获与集合框架应用,结合实际案例深入剖析,助你系统掌握考点,提升应试能力。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
473 9
|
Java 数据库连接 API
互联网大厂校招 JAVA 工程师笔试题解析及常见考点分析
本文深入解析互联网大厂校招Java工程师笔试题,涵盖基础知识(数据类型、流程控制)、面向对象编程(类与对象、继承与多态)、数据结构与算法(数组、链表、排序算法)、异常处理、集合框架、Java 8+新特性(Lambda表达式、Stream API)、多线程与并发、IO与NIO、数据库操作(JDBC、ORM框架MyBatis)及Spring框架基础(IoC、DI、AOP)。通过技术方案讲解与实例演示,助你掌握核心考点,提升解题能力。
558 2
|
架构师 前端开发 Java
Java开发工程师的职业规划应该是什么样的?
Java开发工程师的职业规划涵盖多个阶段,包括初入行业(0-1年)、技能提升(1-3年)、技术专家(3-5年)及管理或专家路线选择(5年以上)。各阶段设定了明确的技能要求与职业目标,从掌握Java基础、常用框架到深入研究高级技术、微服务架构乃至担任管理职务或成为技术专家。通过持续学习与实践,结合个人兴趣,Java工程师可在技术或管理领域找到合适的发展方向,最终实现职业成功。
2182 83
|
机器学习/深度学习 Java PyTorch
Java工程师如何理解张量?
刚接触AI和PyTorch,理解“张量(Tensor)”是入门关键。张量可类比为Java中的多维数组,但更强大,尤其在AI领域支持GPU加速、自动求导等特性。它不仅能高效存储数据,还能进行复杂运算,是深度学习的核心数据结构。掌握张量的维度、数据类型及GPU加速特性,对学习PyTorch至关重要。
510 3
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
设计模式 架构师 Java
Java开发工程师转架构师需要学习什么
Java开发工程师转型为架构师需掌握多项技能:精通Java及框架、数据库与分布式系统;熟悉设计模式与架构模式;积累项目经验;提升沟通与领导力;持续学习新技术;培养系统设计与抽象能力;了解中间件及开发工具;并注重个人特质与职业发展。具体路径应结合个人目标与实际情况制定。
655 20
|
人工智能 前端开发 Java
Java开发工程师转哪个行业比较好?
Java开发工程师转哪个行业比较好?
1279 2
|
小程序 前端开发 JavaScript
Java开发工程师转小程序开发的前景如何?
Java开发工程师转小程序开发的前景如何?
363 1
|
IDE 测试技术 持续交付
Python自动化测试与单元测试框架:提升代码质量与效率
【9月更文挑战第3天】随着软件行业的迅速发展,代码质量和开发效率变得至关重要。本文探讨了Python在自动化及单元测试中的应用,介绍了Selenium、Appium、pytest等自动化测试框架,以及Python标准库中的unittest单元测试框架。通过详细阐述各框架的特点与使用方法,本文旨在帮助开发者掌握编写高效测试用例的技巧,提升代码质量与开发效率。同时,文章还提出了制定测试计划、持续集成与测试等实践建议,助力项目成功。
376 5
|
JSON Dubbo 测试技术
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
389 2
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决

热门文章

最新文章