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

标签 c++ testing googletest googlemock

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

相关文章:

c++ - 在元组 vector 中查找特定的元组元素?

c++ - 在Xcode上将OpenCV与opencv_contrib一起使用时出错

c++ - __m256 未知类型(clang 5.1/i5 CPU)?

angular - 如何测试可观察流?

c++ - dynamic_cast 的性能?

java - 检查 pop 是否用 Selenium (Java) 关闭

testing - Nutch 提示如何测试它

c++ - 如何为 std 枚举实现 googletest 的自定义值打印机

c++ - 谷歌模拟-我可以在同一模拟对象上多次调用EXPECT_CALL吗?

c++ - 在 gmock 中使用指向带有 EXPECT_CALL 的模拟对象的指针会导致段错误或默认处理程序启动