Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 11参数gmock模拟法_C++_Unit Testing_Googletest_Gmock - Fatal编程技术网

C++ 11参数gmock模拟法

C++ 11参数gmock模拟法,c++,unit-testing,googletest,gmock,C++,Unit Testing,Googletest,Gmock,我使用gmock模拟遗留代码中的依赖项。其中一个类有一个具有11个参数的方法。当我尝试使用MOCK_METHOD11_和_CALLTYPE来模拟它时,我发现这个宏不存在。gmock最多只能支持10个参数。你对此有什么建议?我是否使用虚拟体实现此方法?还是复制并扩展宏?谢谢 另外,我现在不需要在测试中模拟这个方法,但将来可能需要这样做 请注意,具有10个以上参数的方法可能会出现问题。我可以建议一个解决方法,这将有助于你的具体情况,但这也可能是一个好主意,除了嘲笑。将几个有意义的参数作为一个组,并将

我使用gmock模拟遗留代码中的依赖项。其中一个类有一个具有11个参数的方法。当我尝试使用MOCK_METHOD11_和_CALLTYPE来模拟它时,我发现这个宏不存在。gmock最多只能支持10个参数。你对此有什么建议?我是否使用虚拟体实现此方法?还是复制并扩展宏?谢谢

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


请注意,

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

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

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

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

};

我同意这是一种代码气味。我感谢你的建议。但它是一个遗留代码库,由于该方法是API的一部分,所以我将尝试其他方法。现在,我正在重写一个普通版本。遗留代码不是问题:只需添加一个采用结构的新方法,也保留旧方法,并让其中一个调用另一个。使它向后兼容并仍然适应您的测试没有什么大不了的。