Bootstrap

单元测试: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.