google test 编译错误(已解决但不知其所以然)

我是用的linux编译环境(centos5.7),几次在单元测试中都遇到这个问题,在给类属性赋值之后用断言(如 EXPECT_EQ)检测需要确认的值,如果不是每个属性都检测到的话,可能会出现编译不过的情况,常常是加上对剩余属性(即使你不需要判断这个值的内容)的判断之后,bug消失,不知道这是个什么道理,有大神知道的话欢迎留言指导!~ 实例如下:

在google test的单元测试文件gt_rate.cpp编译过程出现以下错误:

gt_rate.o:(.ctors+0x0): undefined reference to `global constructors keyed to _ZNSt3tr140_GLOBAL__N_gt_rate.cpp_00000000_66C38F516ignoreE'

原文件如下:

* gt_rate.cpp
 */
#include "CAckObj.h"
#include "CAckRate.h"
#include "CAckTLEvent.h"
#include "CAckDBStorage.h"
#include "CAckDB.h"
#include "gtest/gtest.h"


class CAckRateTest : public ::testing::Test
{
protected:
 virtual void SetUp() {
  info_Init();
  db = new CAckDB();
 }
 virtual void TearDown() {
  info_Exit();
 }
 CAckRate rate;
 CAckDB *db;
};
CAckTLEvent event,event1,event2,event3;

TEST_F(CAckRateTest, calcRate)
{
 CAckDBStorage dbs(db);
 rate.setOid("rategTest");
 rate.setStartTime(1355009955);
 rate.setEndTime(1355009969);
 event.m_ulTime = 1355009957;
 event.m_eType = CAckTLEvent::ORTYPE_TLEvent_ONLINE;
 event.m_eState = CAckTLEvent::START;
 rate.addTLEvent(event);
 dbs.eventAdd(event,rate.getOid());

 EXPECT_EQ(1355009955, (int)rate.getStartTime());
 EXPECT_EQ(1355009969, (int)rate.getEndTime());
 EXPECT_NE(0, rate.calcRate(CAckTLEvent::ORTYPE_TLEvent_ONLINE));
 string sql = "delete from obj_event where objoid='" + rate.getOid() + "';";
 EXPECT_EQ((*db).exec(sql), 0);
}

在文件中添加一行之后,编译执行通过,修改如下:

* gt_rate.cpp
 */
#include "CAckObj.h"
#include "CAckRate.h"
#include "CAckTLEvent.h"
#include "CAckDBStorage.h"
#include "CAckDB.h"
#include "gtest/gtest.h"


class CAckRateTest : public ::testing::Test
{
protected:
 virtual void SetUp() {
  info_Init();
  db = new CAckDB();
 }
 virtual void TearDown() {
  info_Exit();
 }
 CAckRate rate;
 CAckDB *db;
};
CAckTLEvent event,event1,event2,event3;

TEST_F(CAckRateTest, calcRate)
{
 CAckDBStorage dbs(db);
 rate.setOid("rategTest");
 rate.setStartTime(1355009955);
 rate.setEndTime(1355009969);
 event.m_ulTime = 1355009957;
 event.m_eType = CAckTLEvent::ORTYPE_TLEvent_ONLINE;
 event.m_eState = CAckTLEvent::START;
 rate.addTLEvent(event);
 dbs.eventAdd(event,rate.getOid());

 EXPECT_EQ(1355009955, (int)event.m_ulTime);
 EXPECT_EQ(1355009955, (int)rate.getStartTime());
 EXPECT_EQ(1355009969, (int)rate.getEndTime());
 EXPECT_NE(0, rate.calcRate(CAckTLEvent::ORTYPE_TLEvent_ONLINE));
 string sql = "delete from obj_event where objoid='" + rate.getOid() + "';";
 EXPECT_EQ((*db).exec(sql), 0);
}

posted on 2014-03-27 15:22  wawa_foto  阅读(1052)  评论(0)    收藏  举报