mock 抛出一个异常如何终止_史上最全,一篇文章搞定Mock原理及应用

史上最全,一篇文章搞定Mock原理及应用

目录

一、Mock基础知识

    什么是Mock 

    Mock的目的

    Mock的应用场景

    Mock框架对比(JAVA)

二、Mockito研究

    主要资源

    环境起步

    核心注解

    常用方法

三、MockMVC研究

    使用目的

    环境起步

    运行配置

    运行机制

    创建Builder

    方法解析

四、Mock实例

    MockMVC实例

    Mockito实例

附录:参考文档一览

一、Mock基础知识

什么是Mock

Mock 是在测试过程中,对于一些不容易构造/获取的对象,创建一个Mock 对象来模拟对象的行为。Mock 最大的功能是帮你把单元测试进行解耦,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为。

Mock的目的
  1. 验证这个对象的某些方法的调用情况,调用了多少次,参数是什么,返回值是什么等等

  2. 指定这个对象的某些方法的行为,返回特定的值,或者是执行特定的动作等等

Mock的应用场景
  1. 团队并行开发,有了Mock,前、后端人员只需要定义好接口文档就可以开始并行工作,互不影响。后端与后端之间如果有接口耦合,也同样使用Mock解决。

  2. 开启TDD模式,即测试驱动开发。单元测试是TDD实现的基石,而TDD经常会碰到协同模块尚未开发完成的情况,但是有了mock,这些一切都不是问题。当接口定义好后,测试人员就可以创建一个Mock,把接口添加到自动化测试环境,提前创建测试。

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

  4. 模拟访问资源,比如说,你需要调用一个“墙”外的资源来方便自己调试,就可以自己Mock一个。

  5. 系统演示,假如我们需要创建一个演示系统,并且做了简单的UI,那么在完全没有开发后端服务的情况下,也可以进行演示。

  6. 测试场景

  • 接口测试**:对一个接口进行测试,排除这个接口对外部环境的依赖,避免因外部资源而导致测试失败。

  • 功能测试:在功能测试初期,我们往往依赖到第三方提供的接口,但是第三方接口初期是不稳定的(虽然前期已做好服务接口的约定),后期当有较稳定的接口后,我们进行全面地测试,则接口的功能都正常了。如果数据准备比较麻烦或者造数据要双方配合成本比较高的项目,在对外部接口进行第一次全面联调测试后,仍然可以考虑使用mock来全面测试自己内部的功能逻辑。

  • UI自动化测试:对数据源进行mock,UI自动化测试时,页面上展示的信息是来源于其他的数据源。

  • 测试覆盖度,假如有一个接口,有100个不同类型的返回,我们需要测试它在不同返回类型下,系统是否能够正常响应,但是有些返回在正常情况下基本不会发生,难道你要千方百计给系统做各种手脚让它返回以便测试吗?比如,我们需要测试在当接口发生500错误的时候,app是否崩溃,别告诉我你一定要给服务端代码做些手脚让它返回500 。而使用mock,这一切就都好办了,想要什么返回就模拟什么返回,妈妈再也不用担心我的测试覆盖度了!

Mock框架对比(JAVA)
框架 简介 说明
EasyMock EasyMock 是早期比较流行的MocK测试框架。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行。
Mockito EasyMock之后流行的mock工具。它与EasyMock和jMock很相似,但是通过在执行校验什么已经被调用,它消除了对期望行为(expectations)的需要。其它的mocking库需要你在执行记录期望行为(expectations),而这导致了丑陋的初始化代码。 相对EasyMock学习成本低,而且具有非常简洁的API,测试代码的可读性很高。
PowerMock 这个工具是在EasyMock和Mockito上扩展出来的,目的是为了解决EasyMock和Mockito不能解决的问题,比如对static, final, private方法均不能mock。其实测试架构设计良好的代码,一般并不需要这些功能,但如果是在已有项目上增加单元测试,老代码有问题且不能改时,就不得不使用这些功能了。 PowerMock 在扩展功能时完全采用和被扩展的框架相同的 API, 熟悉 PowerMock 所支持的模拟框架的开发者会发现 PowerMock 非常容易上手。PowerMock 的目的就是在当前已经被大家所熟悉的接口上通过添加极少的方法和注释来实现额外的功能。目前PowerMock 仅扩展了 EasyMock 和 mockito,需要和EasyMock或Mockito配合一起使用。
Jmockit JMockit 是一个轻量级的mock框架是用以帮助开发人员编写测试程序的一组工具和API,该项目完全基于 Jav
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值