Gtest 介绍
来源:互联网 发布:电池健康度软件 编辑:程序博客网 时间:2024/06/01 09:11
q Install Gtest
1. Uncompress install package: gtest-1.7.0.zip
2. Compile as below:
g++ -I /home/yinhr/gtest-1.7.0/include -I /home/yinhr/gtest-1.7.0/ -c /home/yinhr/gtest-1.7.0/src/gtest-all.cc
ar -rv libgtest.a gtest-all.o
3. If compile success, it will generate a static library file : libgtest.a
q Install Gmock (used to add stub for a function)
1. Uncompress install package: gmock-1.7.0.zip
2. cd /make
make
cd .. (go to gmock-1.7.0) run below command:
g++ -I gtest/include/ -I gtest/ -I include/ -I ./ -c gtest/src/gtest-all.cc
g++ -I gtest/include/ -I gtest/ -I include/ -I ./ -c src/gmock-all.cc
ar -rv libgmock.a gtest-all.o gmock-all.o
3. If compile success, will generate the static library file : libgmock.a
v Comment:
libgmock.a has included the gtest-all.cc which needed by gtest. So we only need link libgmock.a
1. Add path /unitTest and /gtest/inc in INCLUDE_DIRECTORIES
2. Add path /unitTest in AUX_SOURCE_DIRECTORY
3. Add gtest/lib in link_directories and add gtest in TARGET_LINK_LIBRARIES
项目CMakeLists.txt文件要添加头文件和库文件的引用,
#project name
PROJECT(test_gtest)
#head file path
INCLUDE_DIRECTORIES(
…….
…….
${test_gtest_SOURCE_DIR}/gtest/inc #添加gtest头文件目录
)
LINK_DIRECTORIES(${test_gtest_SOURCE_DIR}/gtest/lib) #添加gtest库文件目录
#source directory
AUX_SOURCE_DIRECTORY(${test_gtest_SOURCE_DIR}/src DIR_SRCS)
#add executable file
ADD_EXECUTABLE(testgcc ${DIR_SRCS})
TARGET_LINK_LIBRARIES(testgcc gmock) #链接静态库
SET(SMARTTHINGS_INC ......
${SMARTTHINGS_DIR}/smarthome
${SMARTTHINGS_DIR}/unitTest
${SMARTTHINGS_DIR}/gtest/inc)
INCLUDE_DIRECTORIES(${SMARTTHINGS_INC})
......
AUX_SOURCE_DIRECTORY(${SMARTTHINGS_DIR}/smarthome SMARTHOME_SRC)
AUX_SOURCE_DIRECTORY(${SMARTTHINGS_DIR}/unitTest UNITTEST_SRC)
SET(SMARTTHINGS_SRC …… ${SMARTHOME_SRC}
${UNITTEST_SRC} )
……
link_directories(/usr/lib/gstreamer-0.10)
link_directories(${SMARTTHINGS_DIR}/gtest/lib)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS} gtest gstplayermixer -lm)
q Create UnitTest folder
ü All TC files are in this folder
q Create gtest folder
ü All gtest head files and library files are in this folder
UT的例子
TEST(EVENTMANAGER_SUIT, Register_2)
{
CEventManager* pEventManager = CEventManager::GetInstance();
int nClientId = 1;
EXPECT_TRUE(pEventManager>Register(funcCallback,NULL,&nClientId));
}
TEST(EVENTMANAGER_SUIT, SubscribeEvent_1)
{
CEventManager* pEventManager = CEventManager::GetInstance();
int nClientId = 1;
pEventManager->Register(funcCallback,NULL,&nClientId);
EXPECT_FALSE(pEventManager->SubscribeEvent(nClientId + 1, 1));
}
TEST(EVENTMANAGER_SUIT, SubscribeEvent_2)
{
CEventManager* pEventManager = CEventManager::GetInstance();
int nClientId = 1;
pEventManager->Register(funcCallback,NULL,&nClientId);
EXPECT_TRUE(pEventManager->SubscribeEvent(nClientId, 1));
}
打桩
include "CSubscriber.h"
CSubscriber::CSubscriber(int fd)
{
}
CSubscriber::~CSubscriber()
{
}
int CSubscriber::readBuf(int len) //待打桩的原函数定义
{
return 1000;
}
int CSubscriber::writeBuf(int len)
{
return 2000;
}
Foo.h
#ifndef __FOO_H__
#define __FOO_H__
class Cal
{
public:
Cal(void);
static int max(int a, int b);
};
#endif
Foo.cpp :
#include "foo.h"
#include "CSubscriber.h"
Cal::Cal(void)
{
}
int Cal::max(int a ,int b)
{
CSubscriber cs(5);
cs.readBuf(2000); //此方法需要打桩
return a > b ? a : b;
}
#include "gtest/gtest.h"
#include "gmock/gmock.h"
using ::testing::AtLeast;
using testing::Return;
class CSubscriber
{
public:
CSubscriber(int fd);
virtual ~CSubscriber();
//function return:
//0: means complete read, all elements parsed OK
//1: means it need recv more buf, not it's not complete
//-1: means the packet is not valid.
//-2: means connection wrong.
int readBuf(int len);
int writeBuf(int len);
void closeSock();
//max send buf length
static int m_iSendBufLen;
//max recv buf length
static int m_iRecvBufLen;
};
class CPublisher
{
public:
CPublisher(int fd);
virtual ~CPublisher();
int readBuf(int len);
int writeBuf(int len);
void closeSock();
};
////////// 需要开发者自己写打桩函数如下:构造一个新的类,继承待打桩函数所属类,为//////////每个方法添加一个MOCK_METHOD1方法,
////////// 参数解释: (函数名,函数返回值(函数参数列表))
class MockCSubscriber : public CSubscriber
{
public:
MockCSubscriber(int fd):CSubscriber(fd){}
MOCK_METHOD1(readBuf, int(int len));
MOCK_METHOD1(writeBuf, int(int len));
MOCK_METHOD0(closeSock, void());
};
class MockCPublisher : public CPublisher
{
public:
MockCPublisher(int fd):CPublisher(fd){}
MOCK_METHOD1(readBuf, int(int len));
MOCK_METHOD1(writeBuf, int(int len));
MOCK_METHOD0(closeSock, void());
};
UT:
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "foo.h"
#include "CSubscriber.h"
using ::testing::Return;
TEST(foo, max)
{
/*EXPECT_EQ(-1, max(2,-1));
EXPECT_EQ(3, max(2,3));*/
MockCSubscriber subObj(5);
ON_CALL(subObj, readBuf(1000)).WillByDefault(Return(2));
int returnValue = subObj.readBuf(1000);
EXPECT_EQ (returnValue,Cal::max(2,3));
}
int main(int argc, char** argv)
{
::testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}
执行以下命令:
cd /build
cmake ..
make
执行完成会后,build文件目录里如下,目录里有一个可执行文件testgtest:
执行./testgtest
§ Primer Guide: http://code.google.com/p/googletest/wiki/V1_6_Primer
§ Advanced Guide: http://code.google.com/p/googletest/wiki/V1_6_AdvancedGuide
§ Sample: http://code.google.com/p/googletest/wiki/V1_6_Samples
http://code.google.com/p/googletest/downloads/list
- Gtest介绍
- Gtest 介绍
- gtest的介绍和使用
- gtest
- gtest
- gtest
- gtest
- gtest
- gtest
- gtest
- gtest
- gtest
- gtest
- gtest
- gtest框架的介绍与应用
- gtest框架的介绍与应用
- gtest框架的介绍与应用
- 推荐:一个写的相当好的介绍C++单元测试框架Google Test (gtest) 教程
- 内存溢出的多种原因及优化方法
- 哈希表的程序学习实例
- 第七周——oj渊子赛马——贪心算法
- BZOJ1231【状压DP】
- leetcode 日经贴,Cpp code -Excel Sheet Column Number
- Gtest 介绍
- LeetCode 191 Number of 1 Bits
- 使用JAVA反射的利与弊
- 详细解析Java中抽象类和接口的区别
- 学习排序 Learning to Rank 小结<转>
- Fragment启动方式
- jQuery easyui 树形菜单
- URAL 1752 Tree 2 树的直径与倍增
- [IOS]关于segue原理机制的理解