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

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

前言

 

《论语》中孔子有言:“工欲善其事,必先利其器。”

 

今年7月,作者希望迎接更大的挑战,从高德地图数据转岗到共享出行后,接手并维护了几个Java后端项目。在熟悉业务和代码的过程中,快速地对原有项目进行单元测试用例的补充,使其单元测试覆盖率达到70%+甚至于100%。有同事问我:“你写单元测试为什么这么快?”我微微一笑:“工欲善其事,必先利其器。而我快速编写Java单元测试用例的技巧就是——JSON序列化。”

 

是的,做任何事情,都要讲究方式方法;只要方式方法对了,就会事半功倍。这里,作者系统性地总结了JSON序列化在编写Java单元测试用例中的使用技巧,希望能够让大家“读有所得、得有所思、思有所获”。


一、 冗长的单元测试代码

 

在编写单元测试用例的过程中,经常会出现以下冗长的单元测试代码。

 

1. 冗长的数据模拟代码

 

1) 模拟类属性值

 

在模拟类属性值时,会遇到以下的冗长代码:

 

image.png 

 

2) 模拟方法参数值

 

在模拟方法参数值时,会遇到以下的冗长代码:

 

image.png 

 

3) 模拟方法返回值

 

在模拟方法返回值时,会遇到以下的冗长代码:

 

image.png 

 

2. 冗长的数据验证代码

 

1) 验证方法返回值

 

在验证方法返回值时,会遇到以下的冗长代码:

 

image.png 

 

2) 验证方法参数值

 

在验证方法参数值时,会遇到以下的冗长代码:

 

image.png 

 

二、 采用JSON序列化简化

 

常言道:“眼见为实,耳听为虚。”下面,就通过JSON序列化来简化上面的单元测试用例代码,让大家先睹为快。

 

1. 简化数据模拟代码

 

对于数据模拟,首先需要先加载JSON资源文件为字符串,然后通过JSON反序列化字符串为数据对象,最后用于模拟类属性值、方法参数值和方法返回值。这样,就精简了原来冗长的赋值语句。

 

1) 模拟类属性值

 

利用JSON反序列化,简化模拟类属性值代码如下:

 

image.png 

 

其中,JSON资源文件languageMap.json的内容如下:

 

image.png 

 

2) 模拟方法参数值

 

利用JSON反序列化,简化模拟方法参数值代码如下:

 

image.png 

 

其中,JSON资源文件userCreateList.json的内容如下:

 

image.png 

 

3) 模拟方法返回值

 

利用JSON反序列化,简化模拟方法返回值代码如下:

 

image.png 

 

其中,JSON资源文件userList.json的内容如下:

 

image.png 

 

2. 简化数据验证代码

 

对于数据验证,首先需要先加载JSON资源文件为字符串,然后通过JSON序列化数据对象为字符串,最后验证两字符串是否一致。这样,就精简了原来冗长的验证语句。

 

1) 验证方法返回值

 

利用JSON序列化,简化验证方法返回值代码如下:

 

image.png 

 

其中,JSON资源文件userList.json的内容如下:

 

image.png 

 

2) 验证方法参数值

 

利用JSON序列化,简化验证方法参数值代码如下:

 

image.png 

 

其中,JSON资源文件userCreateList.json的内容如下:

 

image.png


  接下篇:https://developer.aliyun.com/article/1227489?groupCode=java

相关文章
|
10天前
|
测试技术 API Android开发
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
【7月更文挑战第15天】这是关于自动化测试框架中Selenium API二次封装的教程总结。教程中介绍了如何设计一个支持不同浏览器测试的页面基类(BasePage),该基类包含了对Selenium方法的二次封装,如元素的输入、点击、清除等常用操作,以减少重复代码。此外,页面基类还提供了获取页面标题和URL的方法。
27 2
|
11天前
|
Web App开发 XML Java
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
26 3
|
13天前
|
存储 Web App开发 Java
《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)
【7月更文挑战第13天】这篇文章介绍了如何在Java中创建一个简单的自定义日志系统,以替代Log4j或logback。
50 5
|
14天前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
【7月更文挑战第12天】在本文中,作者宏哥介绍了如何在不使用PageFactory的情况下,用Java和Selenium实现Page Object Model (POM)。文章通过一个百度首页登录的实战例子来说明。首先,创建了一个名为`BaiduHomePage1`的页面对象类,其中包含了页面元素的定位和相关操作方法。接着,创建了测试类`TestWithPOM1`,在测试类中初始化WebDriver,设置驱动路径,最大化窗口,并调用页面对象类的方法进行登录操作。这样,测试脚本保持简洁,遵循了POM模式的高可读性和可维护性原则。
18 2
|
2天前
|
存储 安全 Java
day24:Java零基础 - 序列化与反序列化
【7月更文挑战第24天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
9 1
|
26天前
|
存储 Java
JaveSE—IO流详解:对象输入输出流(序列化及反序列化)
JaveSE—IO流详解:对象输入输出流(序列化及反序列化)
|
24天前
|
分布式计算 Java 数据库
Java中的序列化与反序列化详解
Java中的序列化与反序列化详解
|
1月前
|
JSON Java API
jackson序列化和反序列化中的注解和扩展点大全【收藏】
jackson序列化和反序列化中的注解和扩展点大全【收藏】
|
1月前
|
存储 JSON 数据库
Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术
Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术
|
1月前
|
网络协议 Java API
【Java】序列化和反序列化
【Java】序列化和反序列化
22 4