背景
C++工程开发一般包括编码、编译、自测、集成测试几个阶段。其中自测很重要,充分的自测可以发现和解决编码和设计过程中的绝大部分问题。Google 的gtest框架是一种高效的测试框架,利用gtest 框架在自己模块的持续开发完好,就可以自己实现测试驱动开发,达到下面两个目的:
* 快速验证新添功能;
* 回归验证已有功能(保证新的功能不影响已有的功能)
那么,如何高效地搭建自己的gtest 框架呢?
具体步骤
下面总结了几个最主要的步骤:
安装gtest 开发包
yum search gtest
yum install gtest.x·86_64
yum install gtest-devel.x86_64
测试文件中添加头gtest 头文件和gtest main函数
...
#include <iostream>
#include <vector>
#include <gtest/gtest.h>
....
....
using namespace YourClassUpperNameSpace::YourClassNameSpace;
....
....
int main(int argc, char* argv[])
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
添加你的测试类
- 继承gtest基类
class TestYourClass : public testing::Test
{
...
}
上面最重要的是实现下面的两个虚函数:
- 每个test case 启动前的初始化函数:
virtual void SetUp() {
std::cout<<"SetUp"<<std::endl;
// Setup RPC serser and client pair
your_service_server.reset(new YourServiceImpl(nullptr));
your_service_server->Start();
}
- 每个test case 执行完后的清理函数:
virtual void TearDown()
{
std::cout<<"TearDown"<<std::endl;
your_service_server->Close();
}
如果需要mock 一些依赖接口,这里有时候还需要先mock 一下依赖接口所在的类:
Class MocYourDependentInterface : public YourDependentInterFace {
...
virtual interface1();
virtual interface2();
...
}
完善你的test case
TEST_F(TestYourClass, Case1)
{
int64_t serverid;
int timeout_ms = 10000;
:Status status; │
std::string rpc_server_address = FLAGS_test_machine_ip;
....
}
makefile中添加libgtest 链接
- 如果使用CMakeList里:
参考如下格式把gtest 加入到target_link_Libraries里面:
target_link_libraries(dataserver brpc braft gflags gtest protobuf)
- 如果手动写MakeFile
在链接库里加上 -lgtest
结果展示
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from TestYourClass
[ RUN ] TestYourClass.Case1