【问题标题】:mock method with 11 parameters with gmock使用 gmock 的具有 11 个参数的模拟方法
【发布时间】:2013-03-10 11:16:10
【问题描述】:

我正在使用 gmock 在遗留代码中模拟我的依赖项。其中一个类有一个带有 11 个参数的方法。当我尝试使用 MOCK_METHOD11_WITH_CALLTYPE 模拟它时,我发现这个宏不存在。 gmock 最多只支持 10 个参数。你对此有何建议?我用假人实现这个方法吗?还是复制和扩展宏?谢谢!

PS,我现在不需要在我的测试中模拟这个方法,但将来可能需要这样做。

最好的问候,

【问题讨论】:

    标签: c++ unit-testing googletest gmock


    【解决方案1】:

    参数超过 10 个的方法可能是麻烦的迹象。我可以建议一种解决方法,这将有助于您的具体情况,但除了模拟之外,这也可能是一个好主意。将几个有意义的参数作为一个组,并将它们聚合到一个结构中。然后将该结构的实例作为参数传递给该方法。因此,您可能有 3 或 4 个参数,而不是 11 个参数。这不仅有助于解决您遇到的模拟库问题,还可以提高您的类的可用性,因为具有这么多参数的方法通常很难在呼叫站点。

    【讨论】:

    • 我同意这是一种代码味道。我很欣赏你的建议。但它是一个遗留代码库,并且该方法是 API 的一部分,所以我会尝试其他方法。现在,我要覆盖一个简单的版本。
    • 遗留代码不是问题:只需添加一个采用结构的新方法,也保留旧方法,让其中一个调用另一个。让它向后兼容并仍然适应您的测试没什么大不了的。
    【解决方案2】:

    如果有人需要更多 gmock 参数,这里是一个仅标题扩展:gmock-more-args

    【讨论】:

      【解决方案3】:

      您尝试模拟的方法是纯虚拟的。 这是我在不更改现有代码的情况下所做的:

      struct ParamsMoreThanTen
      {
        Param_Type param_1;
        Param_Type param_N;
      };
      
      MOCK_METHOD1(methodWithMoreThanTenParms, methodReturnType(ParamsMoreThanTen params));
      
      methodReturnType methodWithMoreThanTenParms(
          Param_Type param_1,
          Param_Type param_N) override
      {
      
        return    methodWithMoreThanTenParms(ParamsMoreThanTen
        {
          Param_Type param_1,
          Param_Type param_N
        });
      
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-02
        • 1970-01-01
        • 2022-07-27
        • 1970-01-01
        相关资源
        最近更新 更多