如何匹配Google Mock中的参数引用

时间:2014-04-25 12:10:24

标签: c++ gmock

我是谷歌模拟的新手。现在我有一个关于如何匹配参数引用的问题?这是代码

class Parameter {
public:
    int m_idata;
    char m_cdata;
    bool Parameter::operator ==(const Parameter& element) const {
        return (m_idata == element.m_idata && m_cdata == element.m_cdata);
    }
};

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

    virtual void SetParameter(Parameter& val) = 0;
};

// mock class
class MockFoo: public FooInterface {
public:        
    MOCK_METHOD1(SetParameter, void(Parameter& val));
};

TEST(FooTest, setParameterTest) {   
    MockFoo mockFoo;

    EXPECT_CALL(mockFoo, SetParameter(An<Parameter&>())); // How to match argument reference???

    Parameter para;
    mockFoo.SetParameter(para);  // there is an exception here, why???
}

我还尝试了以下内容来匹配SetParameter()

Parameter test_para;
EXPECT_CALL(mockFoo, SetParameter(Ref(test_para)));

EXPECT_CALL(mockFoo, SetParameter(A<Parameter&>()));

Parameter test_para;
test_para.m_cdata = 'c';
test_para.m_idata = 10;
EXPECT_CALL(mockFoo, SetParameter(_)).WillOnce(::testing::SetArgReferee<0>(test_para));

这两个代码都可能导致异常...... 任何人都可以告诉我如何匹配函数Parameter&中的参数引用SetParameter()吗?

1 个答案:

答案 0 :(得分:0)

这应该是评论,但我没有足够的声誉。

代码中唯一的错误是你有一个多余的“Parameter ::”。 我试图运行代码,我没有看到任何异常。它运行得很好。