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

问题描述 投票:6回答:3

我正在使用gmock来模拟遗留代码中的依赖项。其中一个类有一个带有11个参数的方法。当我尝试使用MOCK_METHOD11_WITH_CALLTYPE来模拟它时,我发现这个宏不存在。 gmock只能支持10个参数。你有什么建议吗?我是否用虚拟体实现这种方法?或者复制并扩展宏?谢谢!

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

最好的祝福,

c++ unit-testing googletest gmock
3个回答
5
投票

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


0
投票

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


0
投票

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

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

};
© www.soinside.com 2019 - 2024. All rights reserved.