写点什么

单元测试:GTest 之事件机制 (一)

用户头像
正向成长
关注
发布于: 2021 年 08 月 05 日

介绍一下 GTest 的安装以及全局事件、TestSuite 事件和 TestCase 事件,并通过一个示例,实现在实际项目中快速上手。

安装

安装,利用git clone https://github.com/google/googletest下载源码,进入代码目录下执行:

cmake CMakeLists.txtmakesudo cp ./googlemock/gtest/libgtest*.a /usr/libsudo cp -r  googletest/include/gtest/ /usr/include
复制代码

事件机制

GTest 提供了一些列的事件机制来便于在 Case 实现开始前和结束的时候进行一些操作,其中包括

  • 全局事件:在所有 Case 执行开始前进行一些设置,以及结束后进行一些清理。

  • TestSuite 事件:TestSuite(测试套件)代表一个测试用例的集合体,其中SetUpTestCase在测试套件的第一个 Case 前执行的操作,同样地,TearDownTestCase是测试套件结束时,执行的操作。

  • TestCase 事件:测试用例级别,SetUp 是在每个测试用例执行之前的操作,TearDown 是每个测试用例结束的时候进行的操作。


实现示例

#include<gtest/gtest.h>#include<iostream>using namespace std;
class Student{public: Student(int age = 18): _age(age){}
void showInfo() { std::cout << " age = " << _age << std::endl; } void setAge(int age) { if(_age != age) { std::cout << "Try to change age " << age << std::endl; } }
private: int _age;};
class FooEnvironment : public testing::Environment { public: virtual void SetUp(){ std::cout << "全局事件: FooEnvironment SetUP" << std::endl; }
virtual void TearDown() { std::cout << "全局事件: FooEnvironment TearDown" << std::endl; }};static Student *s;

class TestMap:public testing::Test {public: static void SetUpTestCase() { //在第一个TestCase之前执行 cout<<"TestSuite事件: SetUpTestCase()"<<endl; s=new Student(23); } static void TearDownTestCase() { //在第一个TestCase之后执行 delete s; cout<<"TestSuite事件: TearDownTestCase()"<<endl; } void SetUp() { //在每个TestCase之前执行 cout<<"TestCase事件: SetUp() is running"<<endl; }
void TearDown() { //在每个TestCase之后执行 cout<<"TestCase事件: TearDown() is running"<<endl; } }; TEST_F(TestMap, setAge) { s->setAge(32);}
TEST_F(TestMap, showInfo) { s->showInfo();}
int main(int argc, char** argv) { testing::AddGlobalTestEnvironment(new FooEnvironment); testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS();}
复制代码

执行下面的指令编译:

g++ -o test_main test_main.cpp -lgtest -lpthread
复制代码

执行结果

[==========] Running 2 tests from 1 test case.[----------] Global test environment set-up.全局事件: FooEnvironment SetUP[----------] 2 tests from TestMapTestSuite事件: SetUpTestCase()[ RUN      ] TestMap.setAgeTestCase事件: SetUp() is runningTry to change age 32TestCase事件: TearDown() is running[       OK ] TestMap.setAge (0 ms)[ RUN      ] TestMap.showInfoTestCase事件: SetUp() is running age = 23TestCase事件: TearDown() is running[       OK ] TestMap.showInfo (0 ms)TestSuite事件: TearDownTestCase()[----------] 2 tests from TestMap (0 ms total)
[----------] Global test environment tear-down全局事件: FooEnvironment TearDown[==========] 2 tests from 1 test case ran. (0 ms total)[ PASSED ] 2 tests.
复制代码


发布于: 2021 年 08 月 05 日阅读数: 6
用户头像

正向成长

关注

正向成长 2018.08.06 加入

想要坚定地做大规模数据处理(流数据方向),希望结合结合批处理的传统处理方式,以及之后流批混合处理方向进行学习和记录。

评论

发布
暂无评论
单元测试:GTest之事件机制(一)