2013-05-01 37 views
1

對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(變量) - 返回對變量的引用。
  • ReturnRefOfCopy(value) - 返回值的副本的引用;副本只要行動一樣長。

相反,它好像ReturnRef也返回到副本的引用。有什麼方法可以使用Google Mock來獲得這種行爲?

+1

'auto&x = obj.GetValue();' – 2013-05-01 02:21:16

+0

@CaptainObvlious正確。想要做出答案,以便我可以接受? – dlanod 2013-05-01 04:04:46

回答

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)才能修改原始值。

相關問題