对Google Mock返回的引用所做的更改能否反映在原始值中?
Can changes made to references returned by Google Mock be reflected in the original value?
对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
)。
相关文章:
- C++ 合并排序返回原始向量
- 为什么原始卷曲构造函数 {} 不返回右值?
- unique_ptr<T>::get() 返回的指针在原始unique_ptr被销毁后不是 nullptr
- 反转由空格分隔的字符串元素将返回比原始字符串更大的字符串
- 在对原始字符串进行一些处理后返回(或转换)原始字符串
- 将原始指针返回到智能指针
- 返回二进制数据的通用方式,而无需原始指针
- 鼠标跟踪的原始输入始终返回 0 作为增量值
- 使用 Python、C++ 和 pybind11 返回并传递原始 POD 指针(数组)
- 返回原始值的QuickSort实现
- 返回引用到原始参数
- 使用霍尔分区方案的快速排序算法返回原始未排序列表
- SWIG:返回原始指针与共享指针的向量
- 返回一个原始指针而不是unique_ptr是一种良好的编码实践吗
- 从取消引用的指针返回原始指针
- 将从方法返回的原始指针存储到智能指针中
- 返回与原始模板类型不同的模板时没有匹配函数
- NDK带有JNI的ndk,使用返回类型的非原始类型调用方法
- 为什么我的选择排序返回原始向量中不在的值
- 改变字符串的副本并返回值,而不是更改原始字符串