GMOCK错误:不允许MOCK_METHOD11

时间:2012-09-22 11:20:19

标签: c++ unit-testing gmock

当我模拟具有11个参数的函数时,它会给出错误消息:

  

错误:'function_name'不是类型

我正在使用

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

是否有11个参数的函数不能被模拟?

1 个答案:

答案 0 :(得分: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));
    };
    
  3. 在我的例子中,我将2个参数的方法拆分为2个方法。我认为这个想法很清楚。

    3。 (不是最佳的)您可以尝试更改gmock源以添加METHOD11 typedef ..