google test 变量初始化位置问题

gtest单元测试,出现Segmentation fault,gdb  单步跟踪发现错误出现在3位置, 进一步确定在4位置的vector.push_back段错误,在4之前打印device信息,没问题。

解决办法是将2位置这行的变量声明放到Test的构造函数中(譬如1位置),原因可能是2位置声明的全局变量并没有在Test函数mgmt声明的时候就声明,导致mgmt中无法调用

device的构造函数将此对象放入自己的vector里。

class CAckMgmtZoneTest : public ::testing::Test
{
protected:
 virtual void SetUp() {
  info_Init();
 }
 virtual void TearDown() {
  info_Exit();
 }

 CAckMgmtZone mgmt;

  2
};

 CAckDevice device;  1
TEST_F(CAckMgmtZoneTest, getChild)
{
 device.genOid();
 device.setName("deviceTest") ;
 mgmt.addDevice(device);  3

  EXPECT_FALSE(NULL==mgmt.getChild(0));
}

LONG32 CAckMgmtZone::addDevice(CAckDevice &device)
{
  do{
    device.chkOid(__FUNCTION__);
    for(vector<CAckDevice>::iterator it = __m_vecDevice.begin(); it != __m_vecDevice.end(); it++)
    {
     if(device.m_strOid == it->m_strOid)
      return ACK_SUCCESS;
    }
    __m_vecDevice.push_back(device);  4
    return ACK_SUCCESS;
   }while(0)
}

posted on 2014-04-03 13:21  wawa_foto  阅读(560)  评论(0)    收藏  举报