Google Mock返回的引用所做的更改是否可以反映在原始值中?
示例测试代码(使用CppUnit作为单元测试框架):
int i = 0;
EXPECT_CALL(mock, GetValue())
.WillOnce(ReturnRef(i));
...
CPPUNIT_ASSERT_EQUAL( 1, i );
示例代码:
auto x = obj.GetValue();
++x;
我的测试表明,这不会更新i
的值,但Google对ReturnRef
和ReturnRefOfCopy
的描述似乎意味着这应该有效,即
相反,似乎ReturnRef
也会返回对副本的引用。有没有办法使用Google Mock获得此行为?
答案 0 :(得分:2)
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
)才能修改原始值。