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

时间:2013-03-21 03:53:05

标签: c++ unit-testing googletest gmock

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

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

致以最诚挚的问候,

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

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

答案 2 :(得分: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
  });

};