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

来源:互联网 发布:淘宝手机端删除评价 编辑:程序博客网 时间:2024/04/27 23:41


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

1 gtest环境部署

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

./configuremake

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

cp lib/.lib/libgtest_main.s* /usr/libcp lib/.lib/libgtest.s* /usr/libcp -R include/gtest /usr/include

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

2 gtest的使用

且看下面一段代码:

/* stdctest.cpp */#include <gtest/gtest.h>#include <cstdlib>#include <cstring>TEST(stdc, atoi){EXPECT_EQ(0, atoi("0"));EXPECT_EQ(34, atoi("34"));EXPECT_EQ(34567776, atoi("34567776"));}TEST(stdc, strcat){char hello[20] = "hello";strcat(hello, ", world");EXPECT_STREQ("hello, world", hello);}

 

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

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

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

g++ stdctest.cpp -o stdctest -lgtest_main -lpthread


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

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

3 结语

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

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

原创粉丝点击