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

zan*_*ngw 5 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???
}
Run Code Online (Sandbox Code Playgroud)

我也尝试了以下匹配SetParameter():

Parameter test_para;
EXPECT_CALL(mockFoo, SetParameter(Ref(test_para)));
Run Code Online (Sandbox Code Playgroud)

EXPECT_CALL(mockFoo, SetParameter(A<Parameter&>()));
Run Code Online (Sandbox Code Playgroud)

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

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

小智 0

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

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