假设我正在模拟类 IClass
,它有一个方法调用 RClass DoIt(int x)
,如下所示:
class RClass
{
int _x;
public:
RClass(int x) :_x(x) { }
}
class MockClass : public IClass
{
public:
MOCK_METHOD1(DoIt, RClass(int)));
}
然后在我的测试中,我想返回一个 RClass
值,该值是用被测代码中调用的第一个参数构造的。我这样试过,但没有成功:
int value = 0;
MockClass mc;
EXPECT_CALL(mc, DoIt(_)).WillRepeatedly(DoAll(SaveArg<0>(&value), Return(RClass(value))));
有什么想法吗?
最佳答案
检查 Invoke() 操作。它允许您为模拟方法指定任意行为。有许多变体,但一种形式看起来像这样:
RClass fake(int x) { return RClass(x); }
ON_CALL(mc, DoIt(_))
.WillByDefault(Invoke(&fake));
如果您是 C++11 类型,lambda 也可以:
ON_CALL(mc, DoIt(_))
.WillByDefault(Invoke([](int x) -> RClass { return RClass(x) }));
关于c++ - 如何在 GMOCK 中使用未指定的参数创建返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31129552/