2012-09-22 95 views
1

當我嘲笑那有11個參數,它給出了一個錯誤消息的功能:GMOCK錯誤:MOCK_METHOD11不允許

error: 'function_name' is not a type

我使用

MOCK_METHOD11(function_name,int(param1,param2,....,param11); 

難道與11個參數的功能不能被嘲笑?

+2

我會更擔心你的函數需要11個參數... – Xeo

+1

是 - 約5之後(除非API或類似),我感到一種不安的感覺,也許有些事情是錯誤的,我應該傳遞一個對象實例,其中參數可以直接訪問,或者可以通過傳遞對象中的實例成員間接獲得。 –

+0

你也錯過了一個結束括號。 ;) – weberc2

回答

2

GMock支持最多10個(含)模擬函數參數。所以你不能將它用於開箱即用的功能。你可以做什麼來模擬這種方法:

  1. (優先)重構此方法以減少參數的數量。如此多的參數使得方法難以控制和理解。

  2. 介紹一種中間代理接口,它有類似的方法只接受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 ..

+0

Fun&games,':: StretchDIBits'有13個參數,所以#2聽起來像是我最好的選擇。 –