找回密码
 立即注册

QQ登录

只需一步,快速开始

gtest使用入门

3
回复
658
查看
[复制链接]

3

主题

9

帖子

1080

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1080

活跃会员热心会员论坛元老

来源: 2019-12-13 19:40:04 显示全部楼层 |阅读模式
0 使用前准备
  • visual studio集成开发环境
  • git 版本控制软件
1 gtest是什么

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

  • 提供强大的断言集,支持包括布尔、整型、浮点型、字符串等

  • 提供断言方法自定义扩展

  • 自动收集测试用例,无需开发者再次组织

  • 提供死亡测试功能

  • 可以将公共的用例初始化和清理工作放入测试夹具中,由gtest自动调用

  • 使用参数化自动生成多个相似的测试用例

    2 gtest的获取和编译

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

下载好后的代码进入googletest/googletest/msvc/2010目录,里面有一个gtest.sln和gtest-md.sln两个解决方案,gtset.sln是静态运行库解决方案,适合在没有安装vs运行库的环境下执行,gtest-md.sln是使用vs动态运行库的解决方案。由于我们默认的vs解决方案都是使用动态库去运行,所以我们这里就只演示动态库的编译,静态库的方式是一样的。

双击打开gtest-md.sln解决方案,vs会提示我们需要升级,点击确定即可,然后在解决方案管理器里面右键生成,编译gtest库。

一般情况下编译都会通过,编译完成后在msvc/2010/gtest-md目录下生成了我们想要的库文件。

3 gtest 单元测试工程的建立

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

右键项目-->属性

包含我们从GitHub上下载下来的源码的include文件路径,如下图所示:

然后包含刚才生成的库文件路径,如下图所示:

最后创建main.cpp文件,编写main函数,运行gtest。

main.cp文件最简单的源码如下所示:

  1. #include <gtest/gtest.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. class CGlobalEnvironment :public testing::Environment
  5. {
  6. public:
  7.     virtual void SetUp()
  8.     {
  9.         //TODO: Do something before every case
  10.     }
  11.     virtual void TearDown()
  12.     {
  13.         //TODO: Do something after every case
  14.     }
  15. };
  16. int main(int argc, char** argv)
  17. {
  18.     testing::InitGoogleTest(&argc, argv);
  19.     testing::AddGlobalTestEnvironment(new CGlobalEnvironment());
  20.     testing::FLAGS_gtest_filter = "*";
  21.     RUN_ALL_TESTS();
  22.     system("PAUSE"); //命令行停在当前窗口
  23.     return 0;
  24. }
复制代码

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

  1. [==========] Running 0 tests from 0 test cases.
  2. [==========] 0 tests from 0 test cases ran. (2 ms total)
  3. [  PASSED  ] 0 tests.
  4. 请按任意键继续. . .
复制代码

至此,一个基本的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使用方法,欢迎关注。



3

主题

9

帖子

1080

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1080

活跃会员热心会员论坛元老

2019-12-13 19:43:50 显示全部楼层
单元测试小白,欢迎各位大佬指点
回复

使用道具 举报

3

主题

9

帖子

1080

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1080

活跃会员热心会员论坛元老

2019-12-13 19:47:02 显示全部楼层
也欢迎各位光临我的blog:https://blog.csdn.net/u014421520
回复

使用道具 举报

51

主题

57

帖子

778

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
778

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主论坛元老

2019-12-15 17:51:46 显示全部楼层
这个不错,加油!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册
关闭

站长推荐 上一条 /1 下一条