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

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

九、 验证数据对象

 

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

 

相关文章
|
25天前
|
jenkins 测试技术 应用服务中间件
【专业测试技能】全流程掌握:部署测试环境的策略与实践
本文分享了关于部署测试环境的策略与实践。文章讨论了部署测试环境的全过程,包括服务如MySQL、Redis、Zookeeper等的部署,以及解决服务间的依赖和兼容问题。文中还介绍了使用Jenkins、Docker等工具进行部署的方法,并通过实战案例讲解了如何创建和管理Jenkins Job、配置代理服务器Nginx、进行前后端服务的访问和优化。最后,作者强调了提问的重要性,并鼓励大家通过互联网解决遇到的问题。
51 2
【专业测试技能】全流程掌握:部署测试环境的策略与实践
|
25天前
|
测试技术 Python
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
本文介绍了Python中的循环语句,包括while和for循环的使用,range()函数的运用,以及continue、break和pass关键字的说明,同时提出了关于while循环是否能与成员运算符结合使用的思考。
32 1
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
|
25天前
|
测试技术 索引 Python
Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(一)
本文提供了Python接口自动化测试中的编程练习,包括计算器、猜数字、猜拳和九九乘法表等经典问题,涵盖了数据类型、运算、循环、条件控制等基础知识的综合应用。
29 1
|
4天前
|
运维 测试技术
拆分软件测试流程,一张图秒杀所有面试
本文主要介绍了软件测试流程的核心内容,包括需求分析、测试用例编写、测试执行、缺陷提交及回归测试等关键步骤。以迭代测试为例,详细说明了每个环节的具体操作和注意事项,并提供了一张测试流程图以便理解。测试流程确保了软件质量,是面试中常见的考察点。
19 7
拆分软件测试流程,一张图秒杀所有面试
|
3天前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
17 6
|
25天前
|
测试技术 Python
Python接口自动化测试框架(基础篇)-- 流程控制之if条件控制
Python中的流程控制语句if条件控制,涵盖了比较运算符、成员运算符、身份运算符、逻辑运算符的使用,if语句的嵌套,以及如何使用input和print函数进行交互式编程练习。
18 1
Python接口自动化测试框架(基础篇)-- 流程控制之if条件控制
|
1月前
|
人工智能 自然语言处理 Java
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
文章介绍了Spring AI,这是Spring团队开发的新组件,旨在为Java开发者提供易于集成的人工智能API,包括机器学习、自然语言处理和图像识别等功能,并通过实际代码示例展示了如何快速集成和使用这些AI技术。
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
|
16天前
|
敏捷开发 jenkins 测试技术
自动化测试之美:打造高效软件测试流程
【8月更文挑战第31天】在软件开发的海洋中,自动化测试犹如一艘航船,引导着项目向着质量的灯塔航行。本文将揭开自动化测试的神秘面纱,从基础理论到实践操作,一步步构建起你的测试框架。你将学会如何编写实用的测试脚本,并将其融入日常开发,最终让测试成为敏捷开发不可或缺的力量。让我们启航,探索自动化测试的世界,确保代码之船稳健前行。
|
17天前
|
IDE Java 测试技术
揭秘Java高效编程:测试与调试实战策略,让你代码质量飞跃,职场竞争力飙升!
【8月更文挑战第30天】在软件开发中,测试与调试对确保代码质量至关重要。本文通过对比单元测试、集成测试、调试技巧及静态代码分析,探讨了多种实用的Java测试与调试策略。JUnit和Mockito分别用于单元测试与集成测试,有助于提前发现错误并提高代码可维护性;Eclipse和IntelliJ IDEA内置调试器则能快速定位问题;Checkstyle和PMD等工具则通过静态代码分析发现潜在问题。综合运用这些策略,可显著提升代码质量,为项目成功打下坚实基础。
35 2
|
25天前
|
存储 测试技术 数据格式
Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(二)
本文通过数据类型转换和文件读取的练习,复习了Python中的数据类型、循环、条件判断、内置函数等基础知识,并演示了如何将字符串数据转换为字典列表,以及如何从文本文件中读取和转换数据。
30 1