c++单元测试工具之——gtest


gtest是谷歌为C++开发的单元测试框架,该框架基于xUnit架构。gtest提供了较丰富的测试特性,且其命令行方式输出界面友好美观,是C++单元测试工具的较佳选择。

1 gtest环境部署

先从这里下载到gtest源码包,解压后执行如下命令:

[plain]  view plain copy print ?
  1. ./configure  
  2. make  

这里google没有提供make install行为来安装,我们需要手动安装。继续执行以下命令:

[plain]  view plain copy print ?
  1. cp lib/.lib/libgtest_main.s* /usr/lib  
  2. cp lib/.lib/libgtest.s* /usr/lib  
  3. cp -R include/gtest /usr/include  

这几条命令将我们需要的库文件和头文件安装到了标准路径下,接下来就可以使用了。

2 gtest的使用

且看下面一段代码:

[cpp]  view plain copy print ?
  1. /* stdctest.cpp */  
  2. #include <gtest/gtest.h>  
  3. #include <cstdlib>  
  4. #include <cstring>  
  5.   
  6. TEST(stdc, atoi)  
  7. {  
  8.     EXPECT_EQ(0, atoi("0"));  
  9.     EXPECT_EQ(34, atoi("34"));  
  10.     EXPECT_EQ(34567776, atoi("34567776"));  
  11. }  
  12.   
  13. TEST(stdc, strcat)  
  14. {  
  15.     char hello[20] = "hello";  
  16.     strcat(hello, ", world");  
  17.     EXPECT_STREQ("hello, world", hello);  
  18. }  

 

这段代码示例了编写测试用例的方法,这里测试的是两个C标准库函数——atoi和strcat,注意代码中包含了<gtest/gtest.h>头文件,包含该头文件方可使用gtest。可以看到,写单元测试用例很简单,使用TEST宏就可以了,该宏有两个参数是需要你理解的,第一个参数表示一个test case(某些测试理论中称之为suite即测试集合),第二个参数表示该测试用例的具体含义,两个参数的命名遵循一般变量命名规则即可。

同一个test case可以有多个测试用例,同一个文件也可有多个test case,一般建议将不同的test case放在不同的文件中,即每个文件只包含一个test case,文件名为test case名。

将这段代码保存成文件,执行如下命令编译:

[plain]  view plain copy print ?
  1. g++ stdctest.cpp -o stdctest -lgtest_main -lpthread  


编译后生成可执行文件,这里需要链接gtest_main和pthread这两个库,gtest_main是gtest的库,它依赖于POSIX线程,所以还需链接pthread线程库。执行可执行文件后得到如下输出表明测试通过:

绿色的一片,看起来很舒服!

3 结语

可以看到,gtest的使用非常简单!不过这里只是简单示例而已,gtest还有很多高级特性,可查阅官方文档了解。其实大多数初学者并没有单元测试的概念,也体会不出单元测试的好处,也就写不出好的测试用例,这些都需要慢慢领会,不然google也不会大费周折的整出这么一玩意儿来。

在编写代码之余,可一边编写单元测试,即边开发边调试,且用单元测试来调试,这样开发时没想到的问题可能会马上暴露出来,这是一种理念,好的理念需要逐步接收,单元测试就是这样一种理念,好的工具同样也要学会使用,有好的工具来辅助开发是编程人员的幸运。

你可能感兴趣的:(c++单元测试工具之——gtest)