在指针返回函数上调用期望时的分段错误

时间:2015-03-26 09:31:32

标签: c++ googletest gmock

在函数上调用期望时出现分段错误 返回一个指针。

data.h

struct Data
{
    int age;
    Data();
    ~Data(){}
};

master.h

class Master
{
    private: 
        Data *m_data;
    public:
        Data* getData() const {return m_data;}
};

master.cc

Master::Master()
{
    Data *m_data = new Data();
}

user.cc << ------------要测试的课程

...
Master masterRef;
masterRef.getData()->age = 10;      <---- How set call expectation on this line?

masterMock.h

class MasterMock
{
    MOCK_CONST_METHOD0(getData(), Data*());
};

testUser.cc

...
TEST_F(TestUser, test1)
{
    MasterMock masterMockRef;
    EXPECT_CALL(masterMockRef, getData()); <---- HERE IT CRASHES with segmentation fault.
}

2 个答案:

答案 0 :(得分:1)

你永远不会初始化m_data指针!所以...如果你试图通过getData()方法访问这个指针,你的应用程序将崩溃并出现seg错误。

class Master
{
    private: 
        Data *m_data;
    public:
        Data* getData() const {return m_data;}
};

//user.cc  <<------------CLASS TO BE TESTED
...
Master masterRef;
masterRef.getData()->age = 10;      <---- How set call expectation on this line?

一种可能的解决方案是在Master类的构造函数中初始化m_data指针,并在析构函数中释放/删除它。

class Master
{
    private: 
        Data *m_data;
    public:
        Master() {m_data = new Data(); }
        ~Master() { delete m_data; }
        Data* getData() const {return m_data;}
};

答案 1 :(得分:0)

你期待调用被调用,但忘记返回我们应该返回的内容。

所以目前没有任何东西返回,因此你正在访问无效的数据指针。

Data* data = new Data();
EXPECT_CALL(masterMockRef, getData()).WillOnce(Return (data));