使用gmock模拟具有11个参数的方法

mock method with 11 parameters with gmock

本文关键字:参数 方法 11个 gmock 模拟 使用      更新时间:2023-10-16

我使用gmock来模拟遗留代码中的依赖项。其中一个类有一个包含11个参数的方法。当我尝试使用MOCK_METHOD11_WITH_CALLTYPE来模拟它时,我发现这个宏不存在。Gmock最多只支持10个参数。你有什么建议吗?我实现这个方法与假体吗?或者复制&扩展宏?谢谢!

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

问好,

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

如果有人需要更多的gmock参数,这里有一个头文件扩展:gmock-more-args

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

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
  });
};