c++单元测试工具之——gtest
2013-01-04 15:26
274 查看
gtest是谷歌为C++开发的单元测试框架,该框架基于xUnit架构。gtest提供了较丰富的测试特性,且其命令行方式输出界面友好美观,是C++单元测试工具的较佳选择。
这里google没有提供make install行为来安装,我们需要手动安装。继续执行以下命令:
这几条命令将我们需要的库文件和头文件安装到了标准路径下,接下来就可以使用了。
这段代码示例了编写测试用例的方法,这里测试的是两个C标准库函数——atoi和strcat,注意代码中包含了<gtest/gtest.h>头文件,包含该头文件方可使用gtest。可以看到,写单元测试用例很简单,使用TEST宏就可以了,该宏有两个参数是需要你理解的,第一个参数表示一个test case(某些测试理论中称之为suite即测试集合),第二个参数表示该测试用例的具体含义,两个参数的命名遵循一般变量命名规则即可。
同一个test case可以有多个测试用例,同一个文件也可有多个test case,一般建议将不同的test case放在不同的文件中,即每个文件只包含一个test case,文件名为test case名。
将这段代码保存成文件,执行如下命令编译:
编译后生成可执行文件,这里需要链接gtest_main和pthread这两个库,gtest_main是gtest的库,它依赖于POSIX线程,所以还需链接pthread线程库。执行可执行文件后得到如下输出表明测试通过:
绿色的一片,看起来很舒服!
在编写代码之余,可一边编写单元测试,即边开发边调试,且用单元测试来调试,这样开发时没想到的问题可能会马上暴露出来,这是一种理念,好的理念需要逐步接收,单元测试就是这样一种理念,好的工具同样也要学会使用,有好的工具来辅助开发是编程人员的幸运。
1 gtest环境部署
先从这里下载到gtest源码包,解压后执行如下命令:./configure make
这里google没有提供make install行为来安装,我们需要手动安装。继续执行以下命令:
cp lib/.lib/libgtest_main.s* /usr/lib cp lib/.lib/libgtest.s* /usr/lib cp -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也不会大费周折的整出这么一玩意儿来。在编写代码之余,可一边编写单元测试,即边开发边调试,且用单元测试来调试,这样开发时没想到的问题可能会马上暴露出来,这是一种理念,好的理念需要逐步接收,单元测试就是这样一种理念,好的工具同样也要学会使用,有好的工具来辅助开发是编程人员的幸运。
相关文章推荐
- c++单元测试工具之——gtest
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之四 - 参数化
- C++单元测试工具——Google Test
- 深入理解gtest C/C++单元测试经验谈
- 深入理解gtest C/C++单元测试经验谈
- 玩转 Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数(转帖)
- 玩转Google开源C++单元测试——gtest
- 深入理解gtest C/C++单元测试经验谈
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之二 - 断言
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest
- Google C++单元测试框架(Gtest)系列教程之一——入门
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest
- gtest单元测试以及统计工具
- 玩转Google开源C++单元测试框架Google Test系列(gtest)(总)
- 玩转Google开源C++单元测试框架Google Test系列(gtest)(总)
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数
- C++单元测试工具unittest++使用小结
- 【转】玩转Google开源C++单元测试框架Google Test系列(gtest)之八 - 打造自己的单元测试框架
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest