emock
emock copied to clipboard
当测函数有多个参数时还可以指定出参吗?
比如测试函数 void function(int in1, int2, int &out1, int &out2),可以分别指定出参out1 out2为某个值吗
引用传值可以用在.with
里面加outBound(obj, <输入参数约束>)
把传入的obj变量来输出
这里的输入参数约束
就像any()
,eq(1)
之类
或者也可以用.invoke(mocker)
,设置指定的mock函数来完成需要的功能
就是比如只想指定out2的出参,out1不管,那么.with(outBound(var, <输入参数约束>)) 这里的输入参数约束该怎么指定为out2呢
.with(any(), any(), any(), outBound(var, <输入参数约束>))
这里的out2
对应var
试了下没问题,但是我发现如果在多个test宏中mock了同一个函数,每次返回不同值,但实际这个函数每次的返回值都只会按第一次mock时指定的参数来。也就是说不同的test宏所mock的函数会相互影响,这个有办法避免么?只让mock的函数在当前的test宏里生效
没有看太明白,每一个EMOCK
对应都是一条单独的mock规范,如果想要有多种返回,可以设置多条不同规则的规范,比如在参数满足某些条件的时候才生效
只让mock的函数在当前的test宏里生效
这个本来应该有一个caller
约束的,能够约定调用者是某个函数的时候才能生效,不过目前是作废状态,还待修复
再问一下,我看到以前也有人问到常函数的mock,现在可以直接mock了吗,我试了以前说的用全局函数的方式并不行
https://github.com/ez8-co/emock/commit/b7f60efbb06de9d4c0c8a01814d817d7b72f5200 https://github.com/ez8-co/emock/commit/14707f43606491b6d05ca8d6ee53bbe225b95c9d 这两个提交增加了常成员函数的支持,感谢反馈
可以参考例子:https://github.com/ez8-co/emock/blob/c0fa6b67673fa9eddda8e3c9f174c61a6a1fb01d/tests/ut/TestNonvirtualMethodMocker.h#L157
.with(eq(const_cast<CUT const*>(&cut)), eq(2)) 例子的代码中这里如果无法拿到cut,能否配合spy拿到常函数被调用时cut的地址
举个例子,我需要对class A的normal_method_1函数做测试,但是函数里却调用了class B的常函数,这种常函数的mock可以实现吗
可以呀,.with
这个可以不写的,也就是全局生效,不匹配指定的对象
EMOCK(&CUT::normal_method_2)
.stubs()
.will(invoke(normal_method_2));
像例子的eq(const_cast<CUT const*>(&cut))
条件也可以写成any()
来实现匹配任意的CUT const
对象
EMOCK(&CUT::normal_method_2)
.stubs()
.with(any(), eq(2))
.will(invoke(normal_method_2));
这种情况下,主要是为了说明后面第二个参数的eq(2)
,所以第一个参数要有一个占位,否则可以直接不写.with
好的,感谢大佬