【问题标题】:How to inspect argument to a gmock EXPECT_CALL()?如何检查 gmock EXPECT_CALL() 的参数?
【发布时间】:2016-04-25 11:06:15
【问题描述】:

我是第一次使用 Google Mock (gMock)。给定以下代码sn-p:

class LinkSignals
{
    public:
        virtual ~LinkSignals() { }

        virtual void onLink(std::string) = 0;
        virtual void onUnLink() = 0;
};


class MockLinkSignals : public LinkSignals
{
    public:
        MOCK_METHOD1(onLink, void(std::string));
        MOCK_METHOD0(onUnLink, void());
};

MockLinkSignals mock_signals;

当我执行一些导致EXPECT_CALL(mock_signals, onLink(_)) 运行的测试代码时,如何检查onLink() 的参数?

【问题讨论】:

    标签: unit-testing testing automated-tests gmock


    【解决方案1】:

    您通常会使用现有的 gmock 匹配器或定义自己的匹配器来检查传递给模拟方法的参数。

    例如,使用默认的 Eq 相等匹配器:

    EXPECT_CALL(mock_signals, onLink("value_I_expect"))
    

    或者检查子字符串说:

    EXPECT_CALL(mock_signals, onLink(HasSubstr("contains_this")))
    

    gmock 文档提供了可用的标准匹配器的详细信息,还描述了如何制作自定义匹配器,例如对于整数参数类型:

    MATCHER(IsEven, "") { return (arg % 2) == 0; }
    

    可以通过将动作附加到期望来捕获变量的参数,尽管这在期望范围内的使用可能有限:

    EXPECT_CALL(mock_signals, onLink(_)).WillOnce(SaveArg<0>(pointer))
    

    我建议在为您的特定情况选择最佳方法之前研究各种可用的匹配器和操作。

    【讨论】:

    • 在这个解释中什么是指针,什么是SaveArg&lt;0&gt;(pointer)
    • @Maf pointer 是指向应写入参数的变量的指针,例如&amp;myvariable 作为 SaveArg&lt;0&gt; 值的目的地
    猜你喜欢
    • 2018-12-30
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多