如何在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
相关产品推荐
相关产品推荐

