You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在gtest的EXPECT_CALL宏中调用参数的成员函数myLambda

在Google Test的EXPECT_CALL中调用参数内的Lambda

针对你的场景,Google Test提供了官方的参数获取方式,无需自定义GetArgument方法,以下是两种可行的实现方案:

方案一:通过Invoke结合自定义Lambda(最灵活)

直接在WillOnce的Invoke中传入一个lambda,接收post方法的MyStruct参数,然后调用其内部的myLambda:

MockMyClass mockMyClass;
EXPECT_CALL(mockMyClass, post(testing::_))
    .WillOnce(Invoke([](const MyStruct& structArg) {
        // 传入你需要的字符串参数调用lambda
        structArg.myLambda("测试消息");
    }));

方案二:使用官方的GetArg工具类

Google Test内置的testing::GetArg<N>()可以获取Mock方法的第N个参数(索引从0开始),你可以在Invoke的lambda中用它来获取MyStruct实例:

MockMyClass mockMyClass;
EXPECT_CALL(mockMyClass, post(testing::_))
    .WillOnce(Invoke([](const MyStruct&) {
        // 获取第一个参数(索引0)并调用其myLambda
        testing::GetArg<0>().myLambda("测试消息");
    }));

注意事项

  • 若你的myLambda不需要参数,直接调用structArg.myLambda()即可。
  • InvokeArgument<N>()工具是用来直接调用第N个参数本身(要求参数是可调用对象),但MyStruct不是可调用类型,因此不能直接用它来调用内部的myLambda,必须通过上述两种方式先获取MyStruct实例再访问成员。

内容的提问来源于stack exchange,提问作者tsarquis88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:03:11