[原创] something about Google Test(Google C++ Testing Framework)

 

先说说cxxtest这个测试框架:用cxxtest来编写测试用例时,我们需要写的只是一个.h文件,在这个文件里include你要测试的类或函数所在的头文件,然后写各种测试函数。与该.h文件对应的.cpp文件是用cxxtest自带的一个脚本cxxtestgen.pl来生成的(脚本调用方法请看cxxtest手册),然后我们就得到了一个.h文件和一个.cpp文件,用gcc/g++编译,得到一个可执行文件,运行此文件,就执行了你所编写的测试用例。

使用Google Test作为你的测试框架时,有点不一样:
文章来源:http://www.codelast.com/
你需要编写一个测试用例文件(例如,unittest.cpp),在这个文件里include你要测试的类或函数所在的头文件(当然也少不了 #include <gtest/gtest.h> ,这是Google Test必需的),然后在里面写各种测试,写完之后,你还再需要写一个含有main()函数的文件,例如main.cpp,内容简单,如下:

#include <gtest/gtest.h>

int main(int argc, char** argv)
{
  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

有点乱了,理一下:现在共有4个文件:main.cpp,unittest.cpp,以及你需要测试的类的.h文件及.cpp文件。

然后,用gcc/g++编译链接这些文件,得到一个可执行文件,运行此文件,就执行了你所编写的测试用例。

注意:

(1)安装好Google Test 之后,用它编写了测试用例,可能会发现运行不了测试用例,提示“error while loading shared libraries: libgtest.so.0: cannot open shared object file: No such file or directory”,那么你就要检查一下Google Test动态库的安装路径了,例如我的RHEL5默认就是安装在 /usr/local/lib/ 下的,这个时候,你需要copy一份同样的文件在 /usr/lib/ 下,当然更简单的方法是做一个符号链接(即“快捷方式”):

cd /usr/lib/
ln -s /usr/local/lib/libgtest.so.0.0.0 libgtest.so.0

(2)编译Google Test 自带的sample的时候,有几个注意事项:你除了要带上 -lgtest 选项,还要带上 -lpthread 选项(似乎不搭边的,不过如果不带的话,会提示几个错误),例如,我编译sample1的命令为:
gcc -o sample1_exec sample1.cc sample1_unittest.cc main.cpp -lgtest -lpthread

其中,sample1_exec 是生成的可执行文件名,sample1.cc 相当于我上面所说的你需要测试的类的.cpp文件,sample1_unittest.cc 相当于我上面所说的 unittest.cpp 文件,main.cpp 就是上面所说的 main.cpp 文件。

编译完成后,执行 sample1_exec,输出如下结果,测试通过:

[==========] Running 6 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 3 tests from FactorialTest
[ RUN      ] FactorialTest.Negative
[       OK ] FactorialTest.Negative (0 ms)
[ RUN      ] FactorialTest.Zero
[       OK ] FactorialTest.Zero (0 ms)
[ RUN      ] FactorialTest.Positive
[       OK ] FactorialTest.Positive (0 ms)
[----------] 3 tests from FactorialTest (1 ms total)
[----------] 3 tests from IsPrimeTest
[ RUN      ] IsPrimeTest.Negative
[       OK ] IsPrimeTest.Negative (0 ms)
[ RUN      ] IsPrimeTest.Trivial
[       OK ] IsPrimeTest.Trivial (0 ms)
[ RUN      ] IsPrimeTest.Positive
[       OK ] IsPrimeTest.Positive (0 ms)
[----------] 3 tests from IsPrimeTest (0 ms total)
[----------] Global test environment tear-down
[==========] 6 tests from 2 test cases ran. (3 ms total)
[  PASSED  ] 6 tests.

文章来源:http://www.codelast.com/
总结:

cxxtest是用脚本帮你生成测试含main()的.cpp文件,Google Test是你自己写含main()的.cpp文件(其实也是固定的内容),相比之下,哪个都不算麻烦。关键是,Google Test是与Google Mock“无缝结合”的,如果你要用Google Mock,那么就最好选择Google Test了(Google Mock也可以与cxxtest联合使用,请看Google Mock的文档)。

文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤ 
转载需注明出处:codelast.com 
感谢关注我的微信公众号(微信扫一扫):

wechat qrcode of codelast

文章来源:http://www.codelast.com/

One thought on “[原创] something about Google Test(Google C++ Testing Framework)

发表评论

邮箱地址不会被公开。 必填项已用*标注