5

私はグーグルモックの新人です。引数の参照を一致させる方法について 1 つ質問があります。ここにコードがあります

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

これら2つのコードは両方とも例外を引き起こす可能性があります...Parameter&関数内の引数参照を一致させる方法を教えてもらえますSetParameter()か?

4

1 に答える 1