我有以下电话:
EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
.WillOnce(DoAll(SaveArg<2>(&bufferSize), Return(make_pair(Success, bufferSize))));
我试图返回作为第二个_
传递的值,作为对中的第二个元素。这是最好的(或者至少是正确的)方式吗?
这个bufferSize变量是在测试类中声明的。
编辑:
换句话说:
假设我有以下内容:
class object{
pair<int, int> f(int x);
}
object obj;
constexpr int fixedValue = 5;
EXPECT_CALL(obj, f(_)).WillOnce(
Return(make_pair(fixedValue, <PARAMETER PASSED TO F>));
发布于 2022-05-20 15:58:14
您的方法是正确的,您将第三个参数中的值匿名化。在我看来,使用lambda或自定义操作是更好的方法。存储的lambda或操作可以在其他期望中重用。
EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
.WillOnce(WithArgs<0, 2>([](Type1 Success, Type2 bufferSize) {
return make_pair(Success, bufferSize);
}));
或
ACTION_P2(ReturnPair, Success, bufferSize) {
return make_pair(Success, bufferSize);
}
EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
.WillOnce(WithArgs<0, 2>(ReturnPair));
更专业,所以更不可取
EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
.WillOnce(WithArg<2>([](Type2 bufferSize) {
return make_pair(someSpecifiedParameter, bufferSize);
}));
或
ACTION_P(ReturnPair, bufferSize) {
return make_pair(someSpecifiedParameter, bufferSize);
}
EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
.WillOnce(WithArg<2>(ReturnPair));
https://stackoverflow.com/questions/72319906
复制相似问题