gtest使用入门

gtest使用入门

  • 0 使用前准备
  • 1 gtest是什么
  • 2 gtest的获取和编译
  • 3 gtest 单元测试工程的建立
  • 4 gtest的简单使用

0 使用前准备

  • visual studio集成开发环境
  • git 版本控制软件

1 gtest是什么

gtest是Google开发的一个开源单元测试框架,git仓库点击这里获取。主要针对c/c++,gtest有如下特点:

  • 提供强大的断言集,支持包括布尔、整型、浮点型、字符串等
  • 提供断言方法自定义扩展
  • 自动收集测试用例,无需开发者再次组织
  • 提供死亡测试功能
  • 可以将公共的用例初始化和清理工作放入测试夹具中,由gtest自动调用
  • 使用参数化自动生成多个相似的测试用例

2 gtest的获取和编译

在GitHub上获取当前最新的gtest源码,我这里使用的是v1.8.1版本,直接用git clone下载

$ git clone -b release-1.8.1 https://github.com/google/googletest.git

下载好后的代码进入googletest/googletest/msvc/2010目录,里面有一个gtest.sln和gtest-md.sln两个解决方案,gtset.sln是静态运行库解决方案,适合在没有安装vs运行库的环境下执行,gtest-md.sln是使用vs动态运行库的解决方案。由于我们默认的vs解决方案都是使用动态库去运行,所以我们这里就只演示动态库的编译,静态库的方式是一样的。
gtest使用入门_第1张图片
双击打开gtest-md.sln解决方案,vs会提示我们需要升级,点击确定即可,然后在解决方案管理器里面右键生成,编译gtest库。
gtest使用入门_第2张图片
一般情况下编译都会通过,编译完成后在msvc/2010/gtest-md目录下生成了我们想要的库文件。
gtest使用入门_第3张图片

3 gtest 单元测试工程的建立

编译生成好库文件后,我们就可以建立gtest工程来做测试了,首先使用vs创建一个空白的c++项目,选择创建控制台项目,然后在项目中添加gtest的 头文件和库文件。

右键项目–>属性
gtest使用入门_第4张图片

包含我们从GitHub上下载下来的源码的include文件路径,如下图所示:gtest使用入门_第5张图片
然后包含刚才生成的库文件路径,如下图所示:
gtest使用入门_第6张图片
最后创建main.cpp文件,编写main函数,运行gtest。

gtest使用入门_第7张图片
main.cp文件最简单的源码如下所示:

#include 
#include  
#include 

class CGlobalEnvironment :public testing::Environment
{
public:
	virtual void SetUp()
	{
		//TODO: Do something before every case
	}

	virtual void TearDown()
	{
		//TODO: Do something after every case
	}
};

int main(int argc, char** argv)
{
	testing::InitGoogleTest(&argc, argv);
	testing::AddGlobalTestEnvironment(new CGlobalEnvironment());
	testing::FLAGS_gtest_filter = "*";
    RUN_ALL_TESTS();
	system("PAUSE"); //命令行停在当前窗口

	return 0;
}

由于gtest是用c++编写,所以刚开始要调用类初始化,初始化接收用户命令行传入参数,具体参数后续讲解,RUN_ALL_TESTS();函数会自动运行我们做的测试用例集,system(“PAUSE”);函数会让命令行窗口停留,以便观察具体的测试结果。没有测试用例集的时候,我们运行该函数,控制台的输出如下:

[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (2 ms total)
[  PASSED  ] 0 tests.
请按任意键继续. . .

至此,一个基本的gtest单元测试环境就搭建好了。

4 gtest的简单使用

使用gtest测试我们需要将被测试的源码加入到测试工程中来,然后使用TEST宏来编写对应的测试用例,TEST宏接收两个参数,第一个是测试用例集的名称,第二个是测试用例的名称。我们做单元测试的时候会运行很多的测试用例集,其中每个测试用例集里面又有很多的测试用例,gtest会自动按照我们的每个测试用例集来运行测试用例,比如我们编写一个简单的测试用例如下:

/* 测试用例集的名字 当前测试用例的名字 */
TEST(demoTestCase, demoTest)
{
	int a =0;
	for (a = 0; a < 100; a++)
	{
		EXPECT_LT(a, 500);
	}
}

这个测试用例是判断a是否小于500,显然当a<100是时候,是小于的,测试肯定能通过,我们运行测试得到的结果如下:

[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from demoTestCase
[ RUN      ] demoTestCase.demoTest
[       OK ] demoTestCase.demoTest (0 ms)
[----------] 1 test from demoTestCase (2 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (6 ms total)
[  PASSED  ] 1 test.
请按任意键继续. . .

到这里,简单的gtest单元测试我们就用起来了,后续会讲解更多的gtest使用方法,欢迎关注。

你可能感兴趣的:(c)