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

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

接上篇:https://developer.aliyun.com/article/1227515?spm=a2c6h.13148508.setting.20.34364f0esCxN3Z


九、 验证数据对象

 

Junit测试框架中Assert类就是断言工具类,主要验证单元测试中实际数据对象与期望数据对象一致。在调用被测方法时,需要对返回值和异常进行验证;在验证方法调用时,也需要对捕获的参数值进行验证。

 

1. 验证数据对象空值

 

1) 验证数据对象为空

 

通过Junit提供的Assert.assertNull方法验证数据对象为空。

 

image.png

 

2) 验证数据对象非空

 

通过Junit提供的Assert.assertNotNull方法验证数据对象非空。

 

image.png

 

2. 验证数据对象布尔值

 

1) 验证数据对象为真

 

通过Junit提供的Assert.assertTrue方法验证数据对象为真。

 

image.png 

 

2) 验证数据对象为假

 

通过Junit提供的Assert.assertFalse方法验证数据对象为假。

 

image.png 

 

3. 验证数据对象引用

 

在单元测试用例中,对于一些参数或返回值对象,不需要验证对象具体取值,只需要验证对象引用是否一致。

 

1) 验证数据对象一致

 

Junit提供的Assert.assertSame方法验证数据对象一致。

 

image.png 

 

2) 验证数据对象不一致

 

Junit提供的Assert.assertNotSame方法验证数据对象一致。

 

image.png 

 

4. 验证数据对象值

 

Junit提供Assert.assertEquals、Assert.assertNotEquals、Assert.assertArrayEquals方法组,可以用来验证数据对象值是否相等。

 

1) 验证简单数据对象

 

对于简单数据对象(比如:基础类型、包装类型、实现了equals的数据类型……),可以直接通过Junit的Assert.assertEquals和Assert.assertNotEquals方法组进行验证。

 

image.png 

 

 

2) 验证简单数组或集合对象

 

对于简单数组对象(比如:基础类型、包装类型、实现了equals的数据类型……),可以直接通过Junit的Assert.assertArrayEquals方法组进行验证。对于简单集合对象,也可以通过Assert.assertEquals方法验证。

 

image.png

 

3) 验证复杂数据对象

 

对于复杂的JavaBean数据对象,需要验证JavaBean数据对象的每一个属性字段。

 

image.png 

 

4) 验证复杂数组或集合对象

 

对于复杂的JavaBean数组和集合对象,需要先展开数组和集合对象中每一个JavaBean数据对象,然后验证JavaBean数据对象的每一个属性字段。

 

image.png

 

 

 

5) 通过序列化验证数据对象

 

如上一节例子所示,当数据对象过于复杂时,如果采用Assert.assertEquals依次验证每个JavaBean对象、验证每一个属性字段,测试用例的代码量将会非常庞大。这里,推荐使用序列化手段简化数据对象的验证,比如利用JSON.toJSONString方法把复杂的数据对象转化为字符串,然后再使用Assert.assertEquals方法进行验证字符串。但是,序列化值必须具备有序性、一致性和可读性。

 

image.png 

 

通常使用JSON.toJSONString方法把Map对象转化为字符串,其中key-value的顺序具有不确定性,无法用于验证两个对象是否一致。这里,JSON提供序列化选项SerializerFeature.MapSortField映射排序字段,可以用于保证序列化后的key-value的有序性。

 

image.png 

 

6) 验证数据对象私有属性字段

 

有时候,单元测试用例需要对复杂对象的私有属性字段进行验证。而PowerMockito提供的Whitebox.getInternalState方法,获取轻松地获取到私有属性字段值。

 

image.png 

 

5. 验证异常对象内容

 

异常作为Java语言的重要特性,是Java语言健壮性的重要体现。捕获并验证异常数据内容,也是测试用例的一种。

 

 

 

1) 通过@Test注解验证异常对象

 

Junit的注解@Test提供了一个expected属性,可以指定一个期望的异常类型,用来捕获并验证异常。但是,这种方式只能验证异常类型,并不能验证异常原因和消息。

 

image.png

 

2) 通过@Rule注解验证异常对象

 

如果想要验证异常原因和消息,就需求采用@Rule注解定义ExpectedException对象,然后在测试方法的前面声明要捕获的异常类型、原因和消息。

 

image.png

 

3) 通过Assert.assertThrows验证异常对象

 

在最新版的JUnit中,提供了一个更为简洁的异常验证方式——Assert.assertThrows方法。

 

image.png

  接下篇:https://developer.aliyun.com/article/1227513?spm=a2c6h.13148508.setting.22.34364f0esCxN3Z

相关文章
|
3天前
|
Java
Java的控制流程语句:深入理解条件语句、循环语句与跳转语句
Java的控制流程语句:深入理解条件语句、循环语句与跳转语句
13 1
|
1天前
|
测试技术 Python Java
《手把手教你》系列技巧篇(六十一)-java+ selenium自动化测试 - 截图三剑客 -下篇(详细教程)
【6月更文挑战第2天】本文介绍了使用Java + Selenium进行自动化测试时如何截图指定元素或目标区域。通过访问百度首页,点击设置并进入搜索设置页面,然后调用截图类截取并保存该页面的特定部分。代码示例展示了如何捕获元素的图像,并提供了截图功能的实现。最终,文章还展示了代码运行后的控制台输出、保存的截图以及浏览器的实际操作效果。
10 0
|
2天前
|
机器人 Java 测试技术
《手把手教你》系列技巧篇(六十)-java+ selenium自动化测试 - 截图三剑客 -中篇(详细教程)
【6月更文挑战第1天】本文介绍了使用Java和Selenium进行自动化测试时的另一种截图方法,即利用Robot类实现全屏截图。Robot类能够捕获屏幕上的所有内容,包括任务栏和浏览器元素。测试场景包括访问指定网站、调用截图方法和保存截图。示例代码展示了如何使用Robot创建全屏截图并保存到特定文件夹。在运行代码前,需确保指定的保存路径存在,否则会报错。
16 4
|
3天前
|
Java 开发者
深入探索Java语言的流程控制
深入探索Java语言的流程控制
|
4天前
|
IDE Java 测试技术
Java中JUnit等测试框架的使用
Java中JUnit等测试框架的使用
|
4天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(五十九)-java+ selenium自动化测试 - 截图三剑客 -上篇(详细教程)
【5月更文挑战第23天】本文介绍了使用Java和Selenium进行自动化测试时如何实现截图操作。原本计划讲解远程测试内容,但因服务器网络问题无法进行,因此转而分享Selenium的截图方法。文章分为三部分,首先简述背景,然后重点介绍了TakeScreenshout类,这是一个用于获取浏览器窗口内容的截图工具,不包含浏览器菜单和任务栏。接着,列举了一个测试场景:访问百度首页并截图保存。最后,提供了代码示例,展示了如何设计自动化测试代码以及截图保存到指定目录,并附有代码运行效果展示。
18 2
|
5天前
|
分布式计算 Java 测试技术
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
14 0
|
5天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(五十八)-java+ selenium自动化测试-分页测试(详细教程)
【5月更文挑战第22天】本文介绍了自动化测试分页的实现方法。首先,文章提出了测试分页时关注的三个关键点:总页数、当前页数和页码导航的可用性。接着,作者分享了一个实用网站([https://www.jq22.com/](https://www.jq22.com/))以找到示例进行实践。在代码部分,展示了使用Java和Selenium进行自动化测试的示例代码,包括获取总页数、遍历所有页面及判断当前页面等操作。最后,简要总结了分页自动化测试的实现过程。
18 1
|
6天前
|
Web App开发 Java 测试技术
《手把手教你》系列技巧篇(五十七)-java+ selenium自动化测试-下载文件-下篇(详细教程)
【5月更文挑战第21天】本文介绍了自动化测试中如何实现无弹窗下载文件,特别针对Chrome浏览器。通过设置`download.default_directory`和`profile.default_content_settings.popups`,可以避免下载弹窗并指定下载路径。示例代码展示了如何使用Java和Selenium实现这一功能,包括导入相关库、设置ChromeOptions和执行下载操作。最后,文章提到虽然没有介绍IE浏览器的下载方法,但已有Chrome和Firefox的方法已足够应对大多数需求。
24 0
|
7天前
|
Web App开发 测试技术 API
自动化测试工具Selenium的深度解析
【5月更文挑战第27天】本文旨在深入剖析自动化测试工具Selenium,探讨其架构、原理及应用。通过对其核心组件、运行机制及在实际项目中的应用案例进行详细解读,以期为软件测试人员提供全面、深入的理解与实践指导。