[英]Can I get away with not mocking all methods in an interface in C++ when using googlemock
我正在使用谷歌模擬1.6 RC,我正在嘗試模擬COM Interface
。 COM接口中有近50種方法,其中一些方法是從基接口繼承的。 當我創建一個繼承自此接口的模擬struct
並僅模擬我正在使用的方法時,我得到了cannot instantiate abstract class
錯誤。
我想知道是否可以在googlemock中執行此操作。
這是不可能的。 您必須從所有接口(構造函數和析構函數除外)重載所有純虛方法。
您必須覆蓋從您直接或間接繼承的類中聲明為純虛擬的每個方法。 有兩個原因不想要全部覆蓋它們:
(1)的修復是使用Google Mock scripts
目錄中的gmock_gen.py
腳本。 它遍歷類定義並將方法聲明轉換為MOCK_METHOD
語句。 如果您遇到(2)的問題,可以用存根替換不必要的MOCK_METHOD
語句:
MOCK_METHOD1(f, bool(int i));
同
virtual bool f(int i) {
thrown std::exception("The stub for f(int) has been invoked unexpectedly.");
}
拋出異常將提醒您已調用特定存根的情況,這意味着您可能需要模擬它。
編輯:如果使用Microsoft的宏編寫模擬的原始接口,則此線程會發布一個腳本,將它們轉換為gmock_gen.py
可接受的C ++。
我不完全確定是否應該在mock類中涵蓋所有方法...在gmock示例中,您可以看到例如析構函數不會被模擬。 因此我認為沒有必要嘲笑整個班級。
無論如何,你不應該創建模擬類而不是模擬結構嗎?
但是,腳本/生成器中有一個gmock_gen.py工具,可以為您完成模擬大類的艱苦工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.