先说说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
感谢关注我的微信公众号(微信扫一扫):
文章来源:http://www.codelast.com/
多谢
果然 ,找了半天还真是高手,
请教以下 我为什么用 静态库就 过不去呢
回这位朋友:用静态库编译我还真没试过。不过为什么一定要用静态库呢?