《Java单元测试实战》——无效单测:那些年,我们写过的无效单元测试(12)

简介: 《Java单元测试实战》——无效单测:那些年,我们写过的无效单元测试(12)

《Java单元测试实战》——无效单测:那些年,我们写过的无效单元测试(11) https://developer.aliyun.com/article/1232104?groupCode=java



3. 验证依赖方法问题

 

这里,以cacheUser(缓存用户)为例,来说明验证依赖方法时所存在的问题。

 

 

代码案例:

 

image.png

1) 不验证依赖方法调用

 

反面案例:

 

有些人觉得,既然已经模拟了依赖方法,并且被测方法已经按照预期返回了值,就没有必要对依赖方法进行验证。

image.png

存在问题:

 

模拟了依赖方法,并且被测方法已经按照预期返回了值,并不代表这个依赖方法被调用或者被正确地调用。

 

比如:在for循环之前,把userList置为空列表,这个单元测试用例是无法验证出来的。

image.png

2) 不验证依赖方法调用次数

 

反面案例:

 

有些很喜欢用Mockito.verify的验证至少一次和任意参数的组合,因为它可以适用于任何依赖方法调用的验证。

image.png

存在问题:

 

这种方法虽然适用于任何依赖方法调用的验证,但是基本上没有任何实质作用。

 

比如:我们不小心,把缓存语句写了两次,这个单元测试用例是无法验证出来的。

image.png


3) 不验证依赖方法调用参数

 

反面案例:

 

既然说验证至少一次有问题,那我就指定一下验证次数。

image.png

 

存在问题:

 

验证方法次数的问题虽然解决了,但是验证方法参数的问题任然存在。

 

比如:我们不小心,把循环缓存每一个用户写成循环缓存第一个用户,这个单元测试用例是无法验证出来的。

image.png

4) 不验证所有依赖方法调用

 

反面案例:

 

不能用任意参数验证方法,那只好用实际参数验证方法了。但是,验证所有依赖方法调用代码太多,所以验证一两个依赖方法调用意思意思就行了。


image.png

存在问题:

 

如果只验证了一两个方法调用,只能保障这一两个方法调用没有问题。

 

比如:我们不小心,在for循环之后,还进行了一个用户缓存。

image.png



《Java单元测试实战》——无效单测:那些年,我们写过的无效单元测试(13) https://developer.aliyun.com/article/1232102?groupCode=java


相关文章
|
1天前
|
XML 测试技术 数据格式
《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG自定义日志-下篇(详解教程)
【7月更文挑战第3天】TestNG教程展示了如何自定义日志记录。首先创建一个名为`TestLog`的测试类,包含3个测试方法,其中一个故意失败以展示日志。使用`Assert.assertTrue`和`Reporter.log`来记录信息。接着创建`CustomReporter`类,继承`TestListenerAdapter`,覆盖`onTestFailure`, `onTestSkipped`, 和 `onTestSuccess`,在这些方法中自定义日志输出。
17 6
|
12小时前
|
并行计算 Java API
Java中的函数式编程实战与Lambda表达式应用
Java中的函数式编程实战与Lambda表达式应用
|
12小时前
|
监控 搜索推荐 Java
实战:基于Java的实时数据流处理平台
实战:基于Java的实时数据流处理平台
|
1天前
|
安全 Java 调度
Java并发编程:从基础到实战
【7月更文挑战第3天】在Java的世界中,并发编程是一块充满挑战与机遇的领域。本文将带领读者从理解并发编程的基本概念开始,逐步深入到Java并发工具的使用和高级技巧的应用。我们将一起探索如何在多线程环境下保证数据的一致性和程序的正确性,以及如何通过高效的并发策略来提升应用性能。准备好,让我们开启Java并发编程的旅程,掌握让应用飞一般运行的秘密。
11 1
|
2天前
|
Java API 开发者
Java网络编程基础与Socket通信实战
Java网络编程基础与Socket通信实战
|
3天前
|
监控 搜索推荐 Java
实战:基于Java的实时数据流处理平台
实战:基于Java的实时数据流处理平台
|
12小时前
|
传感器 数据采集 Java
Java串口通信的基础与实战应用
Java串口通信的基础与实战应用
|
2天前
|
Java 测试技术 Android开发
《手把手教你》系列基础篇(八十四)-java+ selenium自动化测试-框架设计基础-TestNG日志-上篇(详解教程
【7月更文挑战第2天】TestNG是一个用于自动化测试的Java框架,提供日志记录功能。日志有两种模式:底层级详细记录每个步骤,高层级仅记录关键事件。示例代码展示了如何在测试方法中使用`Reporter.log()`记录信息,这些信息会显示在TestNG HTML报告中。文章还提及了日志显示时可能出现的编码问题及解决办法。
|
2天前
|
Java 测试技术 开发者
Java中设计可测试的代码的最佳实践
Java中设计可测试的代码的最佳实践
|
3天前
|
分布式计算 Java 大数据
实战:基于Java的大数据处理与分析平台
实战:基于Java的大数据处理与分析平台