《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(7)

简介: 《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(7)

接上篇:https://developer.aliyun.com/article/1227480?spm=a2c6h.13148508.setting.31.48e04f0eaBVGWH


九、 JSON结合Mockito妙用

 

上面已经介绍过,JSON序列化在编写Java单元测试用例时最大的妙用有两点:

 

JSON反序列化字符串为数据对象,大大减少了数据对象的模拟代码;

JSON序列化数据对象为字符串,把数据对象验证简化为字符串验证,大大减少了数据对象的验证代码。

 

除此之外,JSON序列化结合Mockito,往往会起到意想不到的效果,能产生一些非常巧妙有效的用法。

 

1. 模拟方法返回多个值

 

当一个方法需要多次调用,但返回值跟输入参数无关,只跟调用顺序有关的时,可以用数组来模拟方法返回值。先加载一个列表JSON资源文件,通过JSON.parseObject方法转化为数组,然后利用Mockito的doReturn-when或when-thenReturn语法来模拟方法返回多个值。

 

image.png

 

2. 模拟方法返回对应值

 

当一个方法需要多次调用,但返回值跟调用顺序有关,只能调输入参数有关的时,可以用映射来模拟方法返回值。先加载一个映射JSON资源文件,通过JSON.parseObject方法转化为映射,然后利用Mockito的doAnswer-when或when-thenAnswer语法来模拟方法返回对应值(根据指定参数返回映射中的对应值)。

 

image.png 

 

3. 验证多次方法调用参数

 

当验证一个方法调用参数时,需要用ArgumentCaptor来捕获这个参数,然后通过getValue方法验证这个参数。如果这个方法被多次调用,就没有必要依次验证了,可以通过getAllValues方法获取一个列表,然后通过JSON.toJSONString转化为JSON字符串,然后跟JSON资源文件进行统一验证。

 

image.png

 

当然,二者结合的妙用不仅限于此,还有更多作者没有总结到的。

 

后记

 

闲暇之余,填词一首自娱自乐,借以致敬广大的码农们:

 

《卜算子·致码农》

业务要精通,

眼界需开阔。

谈笑风生略几回,

草案心头过。

编写守规则,

测试知结果。

奋笔疾书数万行,

代码无一错。

 

其中,第二段便说明了代码规范和单元测试的重要性——只有做到“编写守规则,测试知结果”,才能保障“奋笔疾书数万行,代码无一错”。

 

相关文章
|
2天前
|
Java 测试技术 Maven
JAVA单元测试概念与实战
单元测试是软件开发中的一个测试方法,用于验证软件代码中最小的、独立的单元是否按照预期工作。在Java中,这通常指的是单个的方法或者一个类的个别功能。单元测试的目的是隔离代码的每个部分,并确保各个部分是正确的。
19 4
|
1月前
|
监控 网络协议 Java
《Java工程师成神之路》阿里技术专家之作,囊括Java所有知识点!
很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一份完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么。
|
1月前
|
存储 算法 Java
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
|
27天前
|
Java
电子书阅读分享《Java工程师成神之路》
电子书阅读分享《Java工程师成神之路》
31 1
|
1月前
|
分布式计算 Java 大数据
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
43 0
|
5天前
|
IDE Java 测试技术
使用Java进行单元测试:实践与技巧
使用Java进行单元测试:实践与技巧
|
6天前
|
JSON 数据格式 C++
[序列化协议] --- JSON
[序列化协议] --- JSON
19 0
|
26天前
|
Java
电子书阅读分享《Java工程师成神之路》
电子书阅读分享《Java工程师成神之路》
30 2
|
1月前
|
JSON Java fastjson
Java中的JSON序列化和反序列化
Java中的JSON序列化和反序列化
|
1月前
|
JSON 机器人 数据格式
阿里云RPA支持将序列化的JSON数据作为输入参数传递给机器人应用程序
【1月更文挑战第7天】【1月更文挑战第33篇】阿里云RPA支持将序列化的JSON数据作为输入参数传递给机器人应用程序
69 1