对Google Mock返回的引用所做的更改是否可以反映在原始值中?
示例测试代码(使用CppUnit作为单元测试框架):
int i = 0;
EXPECT_CALL(mock, GetValue())
.WillOnce(ReturnRef(i));
...
CPPUNIT_ASSERT_EQUAL( 1, i );
示例代码:
auto x = obj.GetValue();
++x;
我的测试表明,这不会更新i
的值,但谷歌对ReturnRef
和ReturnRefOfCopy
的描述似乎意味着这应该工作,即
- ReturnRef(variable) -返回对变量的引用。
- ReturnRefOfCopy(value) -返回value副本的引用;副本和行动一样长存。
相反,ReturnRef
似乎也返回对副本的引用。是否有一些方法来获得这种行为使用谷歌模拟?
auto
使用与模板相同的类型推导规则。在您的示例中,auto x
的含义与模板类型参数相同。
template<typename T>
int function(T t) {
T x; // <-- is equivalent to `auto x` outside of a template
};
在您的示例中,类型被推断为int
而不是您期望的int&
,这就是为什么原始值保持不变的原因。为了修改原始值,您需要显式声明引用(auto& x
)。