在函数上调用期望时出现分段错误 返回一个指针。
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.
}
答案 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));