1

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

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

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

...

CPPUNIT_ASSERT_EQUAL( 1, i );

示例代码:

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

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

  • ReturnRef(variable) - 返回对变量的引用。
  • ReturnRefOfCopy(value) - 返回对 value 副本的引用;副本与动作一样长。

相反,它似乎ReturnRef也返回了对副本的引用。有没有办法使用 Google Mock 来获得这种行为?

4

1 回答 1

2

auto使用与模板相同的类型扣除规则。在您的情况下auto x,与模板类型参数的含义相同。

template<typename T>
int function(T t) { 
    T x; // <-- is equivalent to `auto x` outside of a template
};

在您的示例中,类型被推断为 anint而不是int&您所期望的,这就是原始值保持不变的原因。您需要显式声明引用 ( auto& x) 以修改原始值。

于 2013-05-01T16:56:56.620 回答