51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 387|回复: 0
打印 上一主题 下一主题

[原创] 浅谈google开源单元测试框架Google Test

[复制链接]
  • TA的每日心情
    无聊
    4 天前
  • 签到天数: 941 天

    连续签到: 3 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2023-3-13 09:44:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    我们在开发的过程中,需要做一些验证测试,来保证我们的代码是按照设计要求工作的,这就需要单元测试了。单元测试(Unit Test),我们称为“UT测试”。对于一个复杂的系统来说,需要编写大量的单元测试用例,有人会觉得这么多的测试代码,将会花费大量的时间,影响开发的进度,会得不偿失。真的是这样吗?其实,对于越是复杂的系统就越是需要单元测试来保证我们的代码的开发质量,及时测试出代码的问题,在开发阶段发现问题总比在系统发布之后发现问题能够较少的节省资源或成本。
      对于单元测试应该是每个开发工程师必备的技能,尤其是高阶的开发工程师会更加注重UT的重要性。同时,我们在开发功能模块之前会考虑到测试用例的实现,这样自然的就会考虑到功能模块的模块化便于UT的编写,从这一方面来说也能提高开发人员开发的代码质量。另外,单元测试用例还可以作为示例供开发人员参考,从而能够更轻松的掌握模块的使用。
      今天就和大家一起学习一个开源的C++的单元测试框架Google test,大家看名字就知道它是由牛逼的Google公司出品。Google Test可以在多种平台上使用,它可以支持:
      Linux、Mac OS X、Windows、Cygwin、MinGW、Windows Mobile、Symbian、PlatformIO等。

      安装和配置
      我们可以从github获取Google Test的源码。
      因为我们下载到的gTest是源代码,还需要将其编译成库文件再进行使用。下面将和大家一起学习如何在windows环境下生成gTest的库文件。在这之前我们需要安装CMake和MinGW。
      将下载的gTest的源码进行解压,源码目录如下图所示。

      打开命令行工具cmd,进入源码的工程目录,新建一个build目录用来存放构建文件,然后,进入build目录执行cmake命令生成Makefile文件。
      mkdir build
      cd build
      cmake -G "MinGW Makefiles" ..



      Makefile文件生成后,再执行下面的命令mingw32-make编译库文件。编译成功后就会发现有libgtest.a 和libgtest_main.a两个静态库生成。这里注意,Windows下mingw安装的make工具名称是mingw32-make而不是make。
      mingw32-make


      接下来我们在VS Code写一个测试用例,使用生成的gTest静态库测试下。按下快捷键【Ctrl+Shift+p】,在弹出的搜索框中搜索【C/C++:Edit Configurations】,可以创建c_cpp_properties.json配置文件。

      在c_cpp_properties.json配置文件添加gTest的头文件目录。

      在task.json配置文件中添加gTest头文件目录和库文件,task.json配置文件可以通过菜单栏中Terminal选项下的【Configure Default Build Task】选项创建。

      上面配置好之后,我们写个测试用例跑一下。
      #include <iostream>
      #include <gtest/gtest.h>
      int add(int a, int b)
      {
          return a + b;
      }
      int sub(int a, int b)
      {
          return a - b;
      }
      TEST(testcase, test_add)
      {
          EXPECT_EQ(add(1,2), 3);
          EXPECT_EQ(sub(1,2), -1);
      }
      int main(int argc, char **argv)
      {  
          std::cout << "run google test --> " << std::endl << std::endl;
          testing::InitGoogleTest(&argc, argv);  
          return RUN_ALL_TESTS();
      }


      运行结果如下图所示,代码中的TEST是一个宏,用来创建测试用例,它有test_case_name和test_name两个参数。分别是测试用例名和测试名,在后面的文章中我们会对其有更深刻的理解,这里就不细说了。RUN_ALL_TESTS也是一个宏,它是测试用例的入口。EXPECT_EQ这个是一个断言相关的宏,用来检测两个数值是否相等。


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

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

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-4 15:36 , Processed in 0.061956 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表