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

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

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


八、 不必要的JSON序列化

 

以上章节,都是说JSON资源文件在单元测试中如何运用,如何利用JSON资源文件把单元测试编写得更优雅。有时候,任何手段都有两面性,过渡依赖JSON资源文件测试,也会把单元测试复杂化。这里,作者总结了几个例子以示说明。

 

1. 完全透传的对象

 

1) 完全透传的参数对象

 

在测试方法中,有些参数没有被任何修改,只是完全被透传而已。

 

被测方法

 

image.png 

 

测试用例

 

image.png 

 

其中,不需要ArgumentCaptor去捕获userDAO.batchCreate的参数并验证参数值,这里只需要验证createList是不是同一个对象即可。

 

2) 完全透传的返回对象

 

在测试方法中,有些返回值没有被任何修改,只是完全被透传而已。

 

被测方法

 

image.png 

 

测试用例

 

image.png 

 

其中,userList对象不需要构造数据,只需要验证是不是同一个对象即可。

 

2. 完全透传的属性

 

1) 完全透传的参数值属性

 

在测试方法中,有些参数值属性没有被任何修改,只是完全被透传而已。

 

被测方法

 

image.png 

 

测试用例

 

image.png

 

其中,user对象不需要构造数据,只需要验证是不是同一个对象即可。

 

2) 完全透传的返回值属性

 

在测试方法中,有些返回值属性没有被任何修改,只是完全被透传而已。

 

被测方法

 

image.png 

 

 

测试用例

 

image.png 

 

其中,user对象不需要构造数据,只需要验证是不是同一个对象即可。

 

3. 仅用少数字段的对象

 

1) 仅用少数字段的参数值对象

 

在测试方法中,有些参数值对象字段虽多,但只会用到其中少数字段。

 

被测方法

 

image.png 

 

测试用例

 

image.png 

 

其中,不需要构造参数值userCreate的所有属性字段,只需构造使用到的name属性字段即可。

 

2) 仅用少数字段的返回值对象

 

在测试方法中,有些返回值对象字段虽多,但只会用到其中少数字段。

 

被测方法

 

image.png 

 

测试用例

 

image.png 

 

其中,不需要构造返回值user的所有属性字段,只需构造使用到的roleId属性字段即可。

 

4. 使用new还是mock初始化对象?

 

在上面案例中,我们都采用new来初始化对象并采用set来模拟属性值的。有些同学会问,为什么不采用mock来初始化对象、用doReturn-when来模拟属性值?我想说,都是一样的效果,只是前者显得更简洁而已。

 

关于使用new还是mock初始化对象,这个问题在网上一直有争论,双方都各有自己的理由。

 

这里,按照作者的个人使用习惯,进行了简单的归纳总结如下:

 

image.png 


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

相关文章
|
4月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
260 1
|
4月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
269 1
|
6月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
604 0
|
7月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
252 0
|
7月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
存储 JSON 前端开发
除了闹过腥风血雨的fastjson,你还知道哪些Java解析JSON的利器?(2)
除了闹过腥风血雨的fastjson,你还知道哪些Java解析JSON的利器?
446 0
|
JSON JavaScript 前端开发
除了闹过腥风血雨的fastjson,你还知道哪些Java解析JSON的利器?(1)
除了闹过腥风血雨的fastjson,你还知道哪些Java解析JSON的利器?
239 0
除了闹过腥风血雨的fastjson,你还知道哪些Java解析JSON的利器?(1)
|
5月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
225 0
|
5月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
425 16