具有变量

时间:2018-01-16 10:28:03

标签: gmock

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

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&LT;&GT;不传递存储在myStoredValue中的值,它只是将给定变量设置为0.理论上,可以使用直接值,但它会使测试不合理(如果没有正确调用set会怎样?)。另一个选择是使用Invoke()传递一个函数,但是如果可能的话,我宁愿坚持使用gmock解决方案。

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

1 个答案:

答案 0 :(得分:0)

如果您使用ByRef扩展代码,则可以使用

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

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