《Java单元测试实战》——简化技巧:Java编程技巧之单元测试用例简化方法(2)

简介: 《Java单元测试实战》——简化技巧:Java编程技巧之单元测试用例简化方法(2)

《Java单元测试实战》——简化技巧:Java编程技巧之单元测试用例简化方法(1) https://developer.aliyun.com/article/1232245?groupCode=java


二、 简化模拟依赖方法

 

1. 利用默认返回值简化模拟依赖方法

 

模拟对象的方法是具有默认返回值的:当方法返回类型为基础类型时,默认返回值是0或false;当方法返回类型为对象类型时,默认返回值是null。在测试用例中,当需要模拟方法返回值为上述默认值时,我们可以省略这些模拟方法语句。当然,显式地写上这些模拟方法语句,可以让测试用例变得更便于理解。

 

原始用例:


image.png

简化用例:

 

可以把以上模拟方法语句直接删除。

 

2. 利用任意匹配参数简化模拟依赖方法

 

在模拟依赖方法时,有些参数需要使用到后面加载的数据对象,比如下面案例中的UserCreateVO的name属性值。这样,我们就需要提前加载UserCreateVO对象,既让模拟方法语句看起来比较繁琐,又让加载UserCreateVO对象语句和使用UserCreateVO对象语句分离(优秀的代码,变量定义和初始化一般紧挨着变量使用代码)。

 

简化用例:

 

可以把以上模拟方法语句直接删除。

 

利用任意匹配参数就可以解决这些问题,使测试用例变得更简洁更便于维护。但是要注意,验证该方法时,不能再用任意匹配参数去验证,必须使用真实的值去验证。

 

原始用例:

 

image.png

简化用例:

image.png

3. 利用do/thenAnswer简化模拟依赖方法

 

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

 

原始用例:


image.png

 简化用例:

image.png


4. 利用Mock参数简化模拟链式调用方法

 

在日常编码过程中,很多人都喜欢使用链式调用,这样可以让代码变得更简洁。对于链式调用,Mockito提供了更加简便的单元测试方法——提供Mockito.RETURNS_DEEP_STUBS参数,实现链式调用的对象自动mock。

 

被测代码


image.png

原始用例:

正常情况下,每一个依赖对象及其调用方法都要mock,编写的代码如下:

image.png

简化用例:

 

利用Mockito.RETURNS_SELF参数编写的测试用例如下:

image.png


 

代码说明:

•在mock对象时,对于自返回对象,需要指定Mockito.RETURNS_SELF参数;

•在mock方法时,无需对自返回对象进行mock方法,因为框架已经mock方法返回了自身;

•在verify方法时,可以像普通测试法一样优美地验证所有方法调用。

参数说明:

在mock参数中,有2个参数适合于mock链式调用:

•RETURNS_SELF参数:mock调用方法语句最少,适合于链式调用返回相同值;

•RETURNS_DEEP_STUBS参数:mock调用方法语句较少,适合于链式调用返回不同值。




《Java单元测试实战》——简化技巧:Java编程技巧之单元测试用例简化方法(3) https://developer.aliyun.com/article/1232243?groupCode=java

相关文章
|
4天前
|
Java 编译器
【Java开发指南 | 第十九篇】Java方法
【Java开发指南 | 第十九篇】Java方法
9 0
|
2天前
|
Java
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
|
4天前
|
Java
Java String 避免空指针的方法
Java String 避免空指针的方法
5 0
|
4天前
|
监控 数据可视化 IDE
python自动化测试实战 —— 单元测试框架
python自动化测试实战 —— 单元测试框架
19 2
|
4天前
|
Java 编译器
【Java开发指南 | 第十七篇】Java 方法
【Java开发指南 | 第十七篇】Java 方法
8 1
|
4天前
|
Java 测试技术 开发者
Java单元测试与集成测试:确保代码质量的最佳实践
【4月更文挑战第2天】在软件开发中,单元测试验证单个代码单元(如Java类或方法)的功能,确保其正确性;而集成测试则关注多个组件协作时的交互。JUnit是常见的Java单元测试框架,集成测试则检验组件间接口的兼容性。Spring框架提供了集成测试的支持。遵循良好编码习惯,编写可测试代码,设计全面的测试用例,是保证代码质量和稳定性的关键。
|
4天前
|
Java 测试技术
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
23 0
|
4天前
|
测试技术
测试基础 Junit单元测试框架
测试基础 Junit单元测试框架
13 2
测试基础 Junit单元测试框架
|
4天前
|
安全 测试技术 Go
Golang深入浅出之-Go语言单元测试与基准测试:testing包详解
【4月更文挑战第27天】Go语言的`testing`包是单元测试和基准测试的核心,简化了测试流程并鼓励编写高质量测试代码。本文介绍了测试文件命名规范、常用断言方法,以及如何进行基准测试。同时,讨论了测试中常见的问题,如状态干扰、并发同步、依赖外部服务和测试覆盖率低,并提出了相应的避免策略,包括使用`t.Cleanup`、`t.Parallel()`、模拟对象和检查覆盖率。良好的测试实践能提升代码质量和项目稳定性。
18 1
|
4天前
|
监控 JavaScript 前端开发
【TypeScript技术专栏】TypeScript的单元测试与集成测试
【4月更文挑战第30天】本文讨论了在TypeScript项目中实施单元测试和集成测试的重要性。单元测试专注于验证单个函数、类或模块的行为,而集成测试关注不同组件的协作。选用合适的测试框架(如Jest、Mocha),配置测试环境,编写测试用例,并利用模拟和存根进行隔离是关键。集成测试则涉及组件间的交互,需定义测试范围,设置测试数据并解决可能出现的集成问题。将这些测试整合到CI/CD流程中,能确保代码质量和快速响应变化。

热门文章

最新文章