《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

 

 

相关文章
|
10月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
865 0
|
缓存 监控 负载均衡
如何提升 API 性能:来自 Java 和测试开发者的优化建议
本文探讨了如何优化API响应时间,提升用户体验。通过缓存(如Redis/Memcached)、减少数据负载(REST过滤字段或GraphQL精确请求)、负载均衡(Nginx/AWS等工具)、数据压缩(Gzip/Brotli)、限流节流、监控性能(Apipost/New Relic等工具)、升级基础设施、减少第三方依赖、优化数据库查询及采用异步处理等方式,可显著提高API速度。快速响应的API不仅让用户满意,还能增强应用整体性能。
|
11月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
352 0
|
11月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
12月前
|
搜索推荐 算法 Java
2025 年互联网大厂校园招聘 JAVA 工程师笔试题及备考要点解析
本文针对互联网大厂校招Java工程师笔试题进行解析,涵盖基础知识、面向对象编程、数据结构与算法、异常处理及集合框架等核心内容。从数据类型、运算符到流程控制语句,从类与对象、继承多态到数组链表、排序算法,再到异常捕获与集合框架应用,结合实际案例深入剖析,助你系统掌握考点,提升应试能力。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
405 9
|
12月前
|
Java 数据库连接 API
互联网大厂校招 JAVA 工程师笔试题解析及常见考点分析
本文深入解析互联网大厂校招Java工程师笔试题,涵盖基础知识(数据类型、流程控制)、面向对象编程(类与对象、继承与多态)、数据结构与算法(数组、链表、排序算法)、异常处理、集合框架、Java 8+新特性(Lambda表达式、Stream API)、多线程与并发、IO与NIO、数据库操作(JDBC、ORM框架MyBatis)及Spring框架基础(IoC、DI、AOP)。通过技术方案讲解与实例演示,助你掌握核心考点,提升解题能力。
472 2
|
XML JSON 前端开发
阿里云JAVA高级测试试题及答案(十二)
阿里云JAVA高级测试试题及答案
384 0
阿里云JAVA高级测试试题及答案(十一)
阿里云JAVA高级测试试题及答案
324 0
|
XML 缓存 druid
阿里云JAVA高级测试试题及答案(十)
阿里云JAVA高级测试试题及答案
422 0
|
XML 缓存 前端开发
阿里云JAVA高级测试试题及答案(九)
阿里云JAVA高级测试试题及答案
308 0

热门文章

最新文章