对Google Mock返回的引用所做的更改能否反映在原始值中?



对Google Mock返回的引用所做的更改是否可以反映在原始值中?

示例测试代码(使用CppUnit作为单元测试框架):

int i = 0;
EXPECT_CALL(mock, GetValue())
    .WillOnce(ReturnRef(i));
...
CPPUNIT_ASSERT_EQUAL( 1, i );

示例代码:

auto x = obj.GetValue();
++x;

我的测试表明,这不会更新i的值,但谷歌对ReturnRefReturnRefOfCopy的描述似乎意味着这应该工作,即

  • 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)。

最新更新