我是第一次使用Google Mock(gMock)。给出以下代码片段:

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()的参数?

最佳答案

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

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

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))

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

10-08 14:12