假设我在模拟类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/

10-10 20:03