《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


相关文章
|
2天前
|
搜索推荐 算法 Java
JAVA中的排序算法详解与实战
JAVA中的排序算法详解与实战
6 1
|
2天前
|
存储 Java 数据处理
Java中的循环结构语句详解与实战应用
Java中的循环结构语句详解与实战应用
7 2
|
2天前
|
Java 数据安全/隐私保护
Java中的选择结构语句详解与实战应用
Java中的选择结构语句详解与实战应用
9 2
|
2天前
|
Java
JAVA运算符详解与实战应用
JAVA运算符详解与实战应用
9 3
|
4天前
|
分布式计算 Java 测试技术
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
13 0
|
5天前
|
Java
Java中的多线程编程:从基础到实战
【5月更文挑战第29天】本文将深入探讨Java中的多线程编程,从基础概念到实际应用,为读者提供全面的指导。我们将首先介绍线程的基本概念和创建方法,然后讨论线程的生命周期、同步和通信机制。最后,我们将通过一个实际案例,展示如何在Java中实现多线程编程,以提高程序的性能和响应速度。
|
7天前
|
SQL 前端开发 Java
苍穹外卖》电商实战项目(java)知识点整理(下)
苍穹外卖》电商实战项目(java)知识点整理(下)
|
7天前
|
Java 应用服务中间件 开发工具
苍穹外卖》电商实战项目(java)知识点整理
苍穹外卖》电商实战项目(java)知识点整理
|
9天前
|
存储 Java
Java语言中的类与对象:深入解析与实战应用
Java语言中的类与对象:深入解析与实战应用
|
10天前
|
设计模式 Java 数据库连接
JAVA设计模式解析与实战
本文探讨了Java中的常见设计模式,包括单例模式、工厂模式和观察者模式。单例模式确保类只有一个实例,常用于管理资源;工厂模式通过抽象工厂接口创建对象,降低了耦合度;观察者模式实现了一对多的依赖关系,当主题状态改变时,所有观察者都会收到通知。理解并运用这些设计模式能提升代码的复用性、可扩展性和可维护性。