2011-05-17 335 views
1

我需要模擬一個只有非虛擬方法的類。這個類 有一個拷貝構造函數。我如何爲它寫一個模擬方法。我得到一個 編譯錯誤,如果我只是用GMock和模擬非虛擬方法的構造函數

MOCK_METHOD1(classname, void(classname& source)); 

在此先感謝。

+1

我知道這是舊的,但這裏的嘲諷非虛方法的一些文檔:https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#mocking-nonvirtual-methods – wulfgarpro 2017-01-15 10:29:12

回答

5

你不能用gmock來模擬非虛函數。所以要考慮的第一個選擇是讓功能變得虛擬。如果您擔心虛擬化功能的性能開銷,請確保這是真正的問題(通過測量),但通常情況並非如此。

如果沒有可能使虛擬功能變爲可能的替代解決方案是使用模板。有關此技術的詳細信息,請參閱this question,有關使用該技術的優缺點,請參閱this question

+0

或者,使用預處理器在測試構建中有條件地使您的函數虛擬化,並在生成構建中保持它們不變(非虛擬)。兩全其美。有一件事需要記住:它由於切片而與多態值成員打成一片。 – Regexident 2013-05-14 21:32:44