《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

相关文章
|
6天前
|
安全 数据可视化 前端开发
【测试开发】用例篇 · 熟悉黑盒测试用例设计方法(2)· 正交表 · 场景设计 · 常见案例练习
【测试开发】用例篇 · 熟悉黑盒测试用例设计方法(2)· 正交表 · 场景设计 · 常见案例练习
19 0
|
4天前
|
自然语言处理 Java API
Java 8的Stream API和Optional类:概念与实战应用
【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
26 7
|
1天前
|
Java 程序员 API
Java 8 Lambda 表达式和Stream API:概念、优势和实战应用
【5月更文挑战第20天】在Java 8中,Lambda 表达式和Stream API是两个非常强大的特性,它们显著改变了Java程序员处理数据和编写代码的方式。本篇技术文章将深入探讨这些特性的概念、优点,并提供实战示例,帮助理解如何有效地利用这些工具来编写更简洁、更高效的代码。
18 6
|
1天前
|
JavaScript 前端开发 Java
《手把手教你》系列技巧篇(四十九)-java+ selenium自动化测试-隐藏元素定位与操作(详解教程)
【5月更文挑战第13天】本文主要讨论了在Selenium自动化测试中如何处理前端隐藏元素的问题。隐藏元素通常是通过`type="hidden"`或`style="display: none;"`属性实现的,它们在页面上不可见,但仍然存在于HTML代码中。Selenium可以定位到这些隐藏元素,但无法直接进行点击、输入等操作,会报错“ElementNotInteractableException”。
18 3
|
2天前
|
JavaScript 前端开发 测试技术
《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)
【5月更文挑战第12天】本文介绍了WebDriver中用于判断元素状态的三个方法:`isEnabled()`、`isSelected()`和`isDisplayed()`。`isSelected()`检查元素是否被选中,通常用于勾选框。`isDisplayed()`则用来判断元素是否在页面上可见。`isEnabled()`方法确定元素是否可操作,例如是否能点击或输入内容。
12 1
|
3天前
|
存储 JavaScript Java
《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否显示(详解教程)
【5月更文挑战第11天】WebDriver 的 `isDisplayed()` 方法用于检查页面元素是否可见,如果元素存在于DOM中且可视,返回`true`,否则返回`false`。在自动化测试中,这个方法常用于验证元素是否真正显示在页面上。示例代码展示了如何使用 `isDisplayed()` 判断百度登录页面的特定错误提示文字是否出现。
15 1
|
4天前
|
JavaScript Java 测试技术
《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)
【5月更文挑战第10天】本文介绍了使用Java和Selenium进行Web自动化测试的实践,以安居客网站为例。最后,提到了在浏览器开发者工具中调试和观察页面元素的方法。
18 2
|
5天前
|
Web App开发 JavaScript 测试技术
《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
【5月更文挑战第9天】本文介绍了在Appium中处理App自动化测试中遇到的Toast元素定位的方法。Toast在Web UI测试中也常见,通常作为轻量级反馈短暂显示。文章提供了两种定位Toast元素的技巧.
12 0
|
5天前
|
Java 测试技术
Java一分钟之-单元测试:JUnit与TestNG
【5月更文挑战第16天】本文介绍了Java常用的单元测试框架JUnit和TestNG,JUnit以其简洁注解受到青睐,而TestNG则提供更高级功能如参数化测试。常见问题包括测试未执行、断言失败等,解决办法包括检查项目配置、调整测试顺序。注意保持测试简单独立,确保高覆盖率。选择合适的框架可提升代码质量。
11 0
|
6天前
|
人工智能 测试技术 数据处理
【测试开发】用例篇 · 熟悉黑盒测试用例设计方法(1)等价类划分法、边界值法、判定表法
【测试开发】用例篇 · 熟悉黑盒测试用例设计方法(1)等价类划分法、边界值法、判定表法
9 0

热门文章

最新文章