慈溪市建设厅网站,51自学网官方网站,网站建设运行问题及建议,东莞cms建站模板引言
本文将先介绍单元测试的相关概念#xff0c;然后引入Google的开源C单元测试框架Gtest#xff0c;最后通过编译、运行Gtest自带的一个测试样例#xff0c;介绍如何在Unix/Linux下使用Gtest。
单元测试
说到单元测试#xff0c;大家应该不会陌生。作为软件开发过程…引言
本文将先介绍单元测试的相关概念然后引入Google的开源C单元测试框架Gtest最后通过编译、运行Gtest自带的一个测试样例介绍如何在Unix/Linux下使用Gtest。
单元测试
说到单元测试大家应该不会陌生。作为软件开发过程中最低级别的测试环节单元测试一般由编码人员自己完成它的目的是隔离程序部件并证明这些单个部件满足预期的功能。在静态程序分析、代码检视之后进行单元测试可以帮助我们在开发过程的早期发现问题。好的测试具备以下特点
1.独立。一个测试用例应该是独立的所谓“独立”即该测试用例的测试结果不受其他测试的影响下面的例子简单地说明了单元测试的独立性 1 #include assert.h2 int glob[3] {1, 2, 3};3 int* g_p glob;4 int alloc(void)5 {6 return *g_p;7 } 8 int release(void)9 {
10 return *g_p--;
11 }
12 void test_1(void)
13 {
14 assert(1 alloc());
15 //release();
16 }
17 void test_2(void)
18 {
19 assert(1 alloc());
20 //release();
21 }
22 int main()
23 {
24 test_1();
25 test_2();
26 return 0;
27 } 在上面的例子中test_2的断言会被抛出显然它的运行受到了test_1的影响test_1中进行了申请(alloc)理应进行释放(release)以保证该用例在运行前后程序的状态一致。
2.有效的组织架构清晰的命名。各个测试用例针对不同的测试对象而对单个测试对象而言又可能有多个测试用例对应该对象的多个功能。好的习惯是把这些用例以层次结构的形式组织起来并使用清晰的命名使得我们通过阅读用例名称即可明了该用例的功能。
3.可移植、可复用。像我们对程序平台性无关的苛刻要求一样对于优秀的测试我们也期望做到在不同的操作系统、编译器间进行方便地移植。
4.当用例失败时提供尽可能多的有效信息。毋庸置疑提示信息越是清晰和全面越方便我们定位问题、高效地找出程序中的bug。
如今有不少测试框架帮助我们完成单元测试像针对C的有Google Test、CppUnit针对C的有CUnit针对Java的有JUnit这些测试框架为我们实现独立、可移植、可复用、有组织的测试提供了条件使我们能够专注于编写程序功能相关的测试代码。下面介绍Gtest的使用方法。
Google C单元测试框架
Google C单元测试框架简称Gtest可在多个平台上使用包括Linux, Mac OS X, Windows, Cygwin和Symbian它提供了丰富的断言、致命和非致命失败判断能进行值参数化测试、类型参数化测试、“死亡测试”。Gtest是一个开源的项目其源码可以从这里下载目前的代码发行版是1.6.0。
编译
源码包中的README文件说明了如何编译Gtest源码目录msvc、xcode中分别包含了Windows、Mac OS X平台相关的项目文件cmake目录下是使用CMake进行Makefiles和项目生成的相关文件如果你在Unix/Linux下直接在源码目录下执行make命令即可编译。
如果执行make的过程中遇到如下出错提示 ./src/gtest-death-test.cc:970:73: error: ‘clone’ was not declared in this scope
make: *** [src/gtest-all.lo] Error 1 在/src/gtest-death-test.cc文件中将第970行的代码 970 child_pid clone(ExecDeathTestChildMain, stack_top, SIGCHLD, args); 改成 970 child_pid fork(); 使用make编译过后并不需要执行make install命令安装Gtest相关的头文件和库文件对自己的测试代码进行编译时从当前目录引用头文件和库文件即可。
执行用例
源码文件的samples目录下为我们提供了多个用例从sample1到sample9Gtest作者由浅入深为我们讲解了Gtest的用法怎么执行这些用例呢
首先进入源码目录下的make目录其中包含了一个Makefile文件执行make命令make命令执行过后可以看到该目录下增加了几个文件其中sample1_unittest就是sample1的可执行文件了。执行./sample1_unittest即可看到测试的运行结果 为编译生成其他用例的可执行文件我们可以参照make目录下的Makefile文件或者执行以下步骤
将gtest-main.a动态库文件拷贝到samples目录下执行以下命令 $ g -I ../include/ -c sample2_unittest.cc 以及 $ g -I ../include/ sample2.o sample2_unittest.o gtest_main.a -lpthread -o test2 最后我们得到了sample2的可执行文件test2经过这几步相信大家也懂得了如何生成自己的Gtest测试执行文件。
小结
本文介绍了良好的测试代码所具备的一些特点对Gtest作了简要介绍说明了如何编译Gtest测试代码、生成Gtest测试可执行文件。接下来的文章将详细介绍Gtest的使用方法包括断言、函数测试、测试固件、参数化、“死亡测试”等内容。
Reference: googletest project 《玩转Google开源C单元测试框架Google Test系列(gtest)》by CoderZh