如何使用GMOCK中未指定的参数创建返回值?

时间:2015-06-30 04:25:57

标签: c++ testing googletest gmock

假设我在嘲笑类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))));

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

查看Invoke()操作。它允许您为模拟方法指定任意行为。有许多变体,但一种形式看起来像这样:

RClass fake(int x) { return RClass(x); }

ON_CALL(mc, DoIt(_))
        .WillByDefault(Invoke(&fake));

如果你是C ++ 11类型,lambdas也可以工作:

ON_CALL(mc, DoIt(_))
        .WillByDefault(Invoke([](int x) -> RClass { return RClass(x) }));