當我嘲笑那有11個參數,它給出了一個錯誤消息的功能:GMOCK錯誤:MOCK_METHOD11不允許
error: 'function_name' is not a type
我使用
MOCK_METHOD11(function_name,int(param1,param2,....,param11);
難道與11個參數的功能不能被嘲笑?
當我嘲笑那有11個參數,它給出了一個錯誤消息的功能:GMOCK錯誤:MOCK_METHOD11不允許
error: 'function_name' is not a type
我使用
MOCK_METHOD11(function_name,int(param1,param2,....,param11);
難道與11個參數的功能不能被嘲笑?
GMock支持最多10個(含)模擬函數參數。所以你不能將它用於開箱即用的功能。你可以做什麼來模擬這種方法:
(優先)重構此方法以減少參數的數量。如此多的參數使得方法難以控制和理解。
介紹一種中間代理接口,它有類似的方法只接受10個參數。這很容易實現:
class OriginalInterface
{
public:
virtual void method(int param1, int param2) = 0;
};
class ProxyInterface : public OriginalInterface
{
public:
virtual void method(int param1, int param2)
{
method1(param1);
method2(param2);
}
virtual void method1(int param1) = 0;
virtual void method2(int param2) = 0;
};
// Now you mock on ProxyInterface
class MockInterface : public ProxyInterface
{
public:
MOCK_METHOD1(method1, void(int));
MOCK_METHOD1(method2, void(int));
};
在我的例子我有兩個參數的方法拆分成2種方法。我認爲這個想法很清楚。
3。 (不是最優)你可以嘗試更改gmock源以添加METHOD11 typedefs ..
Fun&games,':: StretchDIBits'有13個參數,所以#2聽起來像是我最好的選擇。 –
我會更擔心你的函數需要11個參數... – Xeo
是 - 約5之後(除非API或類似),我感到一種不安的感覺,也許有些事情是錯誤的,我應該傳遞一個對象實例,其中參數可以直接訪問,或者可以通過傳遞對象中的實例成員間接獲得。 –
你也錯過了一個結束括號。 ;) – weberc2