我有一个这样的方法的模拟:
MOCK_METHOD2(setValue, int(int notImportant, unsigned int value));
MOCK_METHOD2(getValue, int(int notImportant, unsigned int *value));
Run Code Online (Sandbox Code Playgroud)
在整个测试过程中可以多次调用方法,因此存储所设置的值(并在请求时传递最新的值)非常重要。
然后我尝试嘲笑这种行为:
unsigned int myStoredValue;
ON_CALL(ddalCpriLink, setValue(_, _))
.WillByDefault(DoAll(SaveArg<1>(&myStoredValue),
Return(RETURN_OK)));
ON_CALL(ddalCpriLink, GetValue(_, _))
.WillByDefault(DoAll(SetArgPointee<1>(myStoredValue),
Return(RETURN_OK)));
Run Code Online (Sandbox Code Playgroud)
这就是问题所在。SetArgPointee<> 不会传递 myStoredValue 中存储的值,它只是将给定变量设置为 0。理论上,可以使用直接值,但这使得测试不合理(如果没有正确调用 set 怎么办?)。另一种选择是仅传递一个使用 Invoke() 执行此操作的函数,但如果可能的话,我宁愿坚持使用 gmock 解决方案。
我的问题是:是否可以将变量的值传递给 SetArgPointee<>?如果没有,googletest 团队是否有任何特殊原因决定不实现此类功能?
如果你扩展你的代码,ByRef
它可以工作:
ON_CALL(ddalCpriLink, GetValue(_, _))
.WillByDefault(DoAll(SetArgPointee<1>(ByRef(myStoredValue)),
Return(RETURN_OK)));
Run Code Online (Sandbox Code Playgroud)
如果不使用ByRef
的值myStoredValue
,则在执行该行时使用。
归档时间: |
|
查看次数: |
8241 次 |
最近记录: |