Mock打桩介绍

Mock简介

mock 工具的作用是指定函数的行为(模拟函数的行为)。可以对入参进行校验,对出参进行设定,还可 以指定函数的返回值。
几个相关概念:
(1)mock 规范:每个 MOCKER(function)开始,跟一系列的.stubs、.with、.will 等的内容的整体,称 为一个 mock 规范。

(2)核心关键字:指 stubs/defaults/expects/before/with/after/will/then/id 等这些直接跟在点后面 的关键字。

(3)扩展关键字:指 once()/eq()/check()/returnValue()/repeat()等这些作为核心关键字参数的关键字。
匹配关键字:expects的参数
约束关键字:with的参数
桩关键字:will/then的参数

Mock打桩

3个用于打桩的宏:

  • MOCKER:对全局函数(C函数)打桩
    MOCKER(函数名)
  • MOCKER_CPP:对类的普通函数打桩
    MOCKER_CPP(&类名::函数名)
  • MOCKER_CPP_VIRTUAL:对类的虚函数打桩
    MOCKER_CPP_VIRTUAL(类对象指针,&类名::函数名)

2个核心关键字:

stubs() :指定某个函数的行为,单纯表示打桩
will():和桩关键字一起用,指定被调函数的行为

2个桩关键字:

returnValue(一个值): 对返回值打桩,即data桩
注意:mock是强类型的,不支持默认类型转换,类型不一致的话,需要手动强制类型转换
invoke(一个函数名):对函数本身打桩,即user桩

更多的核心关键字:

  • defaults:设定函数的默认行为,会被stubs、expects等覆盖掉

  • then: 和will用法一样,第一次用will,后面更多次用then,如果调用次数超过了设置的次数,则后面的以最后一次为准

  • id、before、after:用于指定多个规范之间的顺序

  • expects: 和匹配关键字一起用,校验次数

  • with: 和约束关键字一起用,校验参数

  • repeat(值,次数):重复返回一个值多少次

  • returnObjectList(值1,值2,值3,…):依次返回这些值

  • increase(初始值,结束值):返回值每次加1,结束值可以没有

注意:这仨关键字对次数有严格限制,如果调用次数多了,用例会挂掉,少了没关系

匹配关键字:和expects一起校验次数的

约束关键字:和with一起校验参数

  • 入参校验:

  • 设置出参:

卸桩

GlobalMockObject::verify():校验并清除所有MOCKER规范,即卸桩,直接写在TearDown里即可

优缺点

优点

1,调用起来更加简洁,尤其是针对虚函数的打桩,使用极其方便
2,对于打的多个桩,只需要一行就可以全部清除

缺点

1,没法对变长参数的函数打桩,如日志函数,就无法打桩
2,无法单独清除某一个桩,有时候不是很方便。如果非要实现单独清除某个桩,MOCK_METHOD勉强可以做到(PPT里未涉及到),但这个也是以对象为维度的,而不是针对某个桩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值