Google测试如何将InvokeArgument与WithArg一起使用
GoogleTest how to use InvokeArgument With WithArg
>我有一个模拟函数:
MOCK_METHOD4(my_func, int(double, double, void* (*cb) (int), int p1));
我想以第三个参数作为参数调用上述函数的第二个(基于 0 的)参数,即以"p1"作为参数调用"cb"函数。我该怎么做?
我可以使用InvokeArgument调用带有一些自定义值的"cb":
ON_CALL(mockObj, my_func(_, _, _, _)).
WillByDefault(DoAll(
IgnoreResult(InvokeArgument<2>(10)),
Return(0)));
但是我想使用传递给同一个模拟函数调用的实际参数来调用它。
您可以定义一个ACTION
来调用回调。如下所示:
ACTION(CallCb) {
arg2(arg3);
}
...
ON_CALL(*mockObj, my_func(_, _, _, _))
.WillByDefault(
DoAll(CallCb(),
Return(0)));
由于DoAll
按顺序处理操作,因此您可以将第三个参数值保存到外部变量,然后使用该变量作为参数调用第二个参数。
int p;
ON_CALL(mockObj, my_func(_, _, _, _)).
WillByDefault(DoAll(
SaveArg<3>(&p),
IgnoreResult(InvokeArgument<2>(p)),
Return(0)));
不幸的是,将WithArg
和InvokeArgument
结合起来是行不通的。但是,您可以使用Invoke
并匹配传递给模拟方法的回调函数。像这样:
EXPECT_CALL(*m_pInstallManagerMock, my_func(_, _, my_callback, _)).
WillOnce(DoAll(
WithArg<3>(IgnoreResult(Invoke(my_callback))),
Return(0)));
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 如何使我的 sizeof sum 结构与空参数包一起工作
- Google测试如何将InvokeArgument与WithArg一起使用