单元测试:GTest之事件机制(一)
介绍一下GTest的安装以及全局事件、TestSuite事件和TestCase事件,并通过一个示例,实现在实际项目中快速上手。
安装
安装,利用下载源码,进入代码目录下执行:
cmake CMakeLists.txt
make
sudo cp ./googlemock/gtest/libgtest*.a /usr/lib
sudo cp -r googletest/include/gtest/ /usr/include
事件机制
GTest提供了一些列的事件机制来便于在Case实现开始前和结束的时候进行一些操作,其中包括
全局事件:在所有Case执行开始前进行一些设置,以及结束后进行一些清理。
TestSuite事件:TestSuite(测试套件)代表一个测试用例的集合体,其中在测试套件的第一个Case前执行的操作,同样地,是测试套件结束时,执行的操作。
TestCase事件:测试用例级别,SetUp是在每个测试用例执行之前的操作,TearDown是每个测试用例结束的时候进行的操作。
实现示例
#include
#include
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()"<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 TestMap
TestSuite事件: SetUpTestCase()
[ RUN ] TestMap.setAge
TestCase事件: SetUp() is running
Try to change age 32
TestCase事件: TearDown() is running
[ OK ] TestMap.setAge (0 ms)
[ RUN ] TestMap.showInfo
TestCase事件: SetUp() is running
age = 23
TestCase事件: 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.