带你读懂mock测试——单元测试实践篇

1、什么是mock测试?

Mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的比较复杂的对象,用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。

2、为什么要进行Mock测试?

Mock是为了解决不同的单元之间由于耦合而难于开发、测试的问题。所以,Mock既能出现在单元测试中,也会出现在集成测试、系统测试过程中。

Mock 最大的功能是帮你 把单元测试的耦合分解开, 如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为。

如图,例如有这样一段程序,A接口要依赖后面的B、C,当需要测试A的时候,我们需要把整个依赖关系构造出来,比较复杂;

而使用mock的话,可以把结构进行分解,如图所示

3、Mock对象适用场景

需要将被测模块和其他依赖模块独立开,构造一个独立的测试环境,不关注被测单元的依赖对象,只关注被测单元的功能逻辑

•被测单元依赖的模块尚未开发完成,而 被测单元需要依赖模块的返回值进行后续处理

被测单元依赖的对象较难模拟或者构造比较复杂。

4、Mock测试的优势

团队可以并行工作

有了Mock,前后端人员只需要定义好接口文档就可以开始并行工作,互不影响,只在最后的联调阶段往来密切;后端与后端之间如果有接口耦合,也同样能被Mock解决;测试过程中如果遇到依赖接口没有准备好,同样可以借助Mock;

不会出现一个团队等待另一个团队的情况。这样的话,开发自测阶段就可以及早开展,从而发现缺陷的时机也提前了,有利于整个产品质量以及进度的保证

可以模拟那些无法访问的资源

比如墙

隔离系统

假如我们需要调用一个post请求,为了获得某个响应,来看当前系统是否能正确处理返回的“响应”,但是这个post请求会造成数据库中数据的污染,那么就可以充分利用Mock,构造一个虚拟的post请求,我们给他指定返回就好了。

测试覆盖度

假如有一个接口,有100个不同类型的返回,我们需要测试它在不同返回下,系统是否能够正常响应,但是有些返回在正常情况下基本不会发生

5、Mock测试存在的问题

•测试人员不应该被覆盖率高的测试所迷惑,覆盖率高不代表没有问题。需要去判断这些地方使用Mock测试是否合理,这些Mock测试是否应该换成真实模块间的调用和集成。

•当把mock接口换成实际接口后,测试/开发也必须把之前的测试重新做一遍,

建议:mock接口只能与主流程联调/ 异常返回测试,不要过分依赖mock接口进行测试。

•测试完毕,上线前请一定确保 为了mock而做的相关代码/配置文件的修改,已经完全恢复了

6、Mock测试方式

一般都是借助工具来进行mock,常见的比如fiddler。选择工具时,可以考虑一下几点

•一是数据要好管理,别让我管理一堆文件

•二是mock接口最好可以设置成和真实接口完全一致,这样就只需要切换hosts就可以切换mock接口和真实接口,不需要修改代码

•三是跨平台,mock接口在win

七、使用mock时,切记的几点:

1. 测试人员不应该被覆盖率高的自动化测试所迷惑,覆盖率高不代表没有问题。

2. 当把mock接口换成实际接口后,测试/开发也必须把之前的测试重新做一遍。

建议: mock接口只能主流程联调返回测试,不要过分依赖mock接口进行测试。

3. 测试完毕,上线前,请一定确保为Mock而做的相关代码/配置文件的修改,已经完全恢复了

建议:上线checklist中条条列出,并上线前review

八、使用Mock做单元测试

Mockito基本使用方法简介

1)、静态导入会使代码更简洁

import static org.mockito.Mockito.*;

举例:

//创建mock对象,mock一个List接口
List mockedList = mock(List.class);
//如果不使用静态导入,则必须使用Mockito调用
List mockList = Mockito.mock(List.class);

 

2)、验证某些行为

//你可以mock一个具体的类型ÿ
  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值