带有变量的 SetArgPointee

SetArgPointee with a variable

我有一个模拟这样的方法:

MOCK_METHOD2(setValue, int(int notImportant, unsigned int value));
MOCK_METHOD2(getValue, int(int notImportant, unsigned int *value));

在整个测试过程中可以多次调用方法,因此存储设置的值(并在请求时传递最新的值)很重要。

然后我试图模拟这种行为:

unsigned int myStoredValue;
ON_CALL(ddalCpriLink, setValue(_, _))
    .WillByDefault(DoAll(SaveArg<1>(&myStoredValue),
        Return(RETURN_OK)));
ON_CALL(ddalCpriLink, GetValue(_, _))
    .WillByDefault(DoAll(SetArgPointee<1>(myStoredValue),
        Return(RETURN_OK)));

这就是问题所在。 SetArgPointee<> 不传递存储在 myStoredValue 中的值,它只是将 given 变量设置为 0。理论上,可以使用直接值,但它使测试变得不合理(如果 set 调用不正确怎么办?)。另一种选择是使用 Invoke() 传递一个函数,但如果可能的话我宁愿坚持使用 gmock 解决方案。

我的问题是:是否可以将变量的值传递给 SetArgPointee<>? 如果不是,googletest 团队是否有任何特殊原因决定不实施此类功能?

如果您使用 ByRef 扩展您的代码,它会起作用:

ON_CALL(ddalCpriLink, GetValue(_, _))
    .WillByDefault(DoAll(SetArgPointee<1>(ByRef(myStoredValue)),
        Return(RETURN_OK)));

如果您不使用 ByRef,则在执行该行时使用 myStoredValue 的值。