本帖最后由 测试积点老人 于 2018-12-26 16:31 编辑
Google Test (libgtest) 是由谷歌开发的一款基于xunit框架的跨平台单元测试框架,C#上的NUnit,Java的JUnit写单元测试非常容易,也不乏可视化工具与IDE集成插件,深受喜欢测试区洞开发的程序员的喜爱。但对于C++来说,写测试就看着麻烦一些。但如果用习惯了,google test还是不错的。google test更多的信息这里就不赘述了。下面根据我的实践,总结以下安装和第一次编写google test所需要做的事情,网上虽然有些教程,但我遇到的问题往往要综合很多篇文章才能解决。这里我根据自己的实践,综合了几篇文章里的方法,结合ubuntu系统,写了一个更详细的介绍。
Step1.首先下载安装google test
对于ubuntu系统,可直接从软件源里下载更新libgtest-dev
或者 sudo apt-get install libgtest-dev
这样会自动把googtest的头文件安装到/usr/include/gtest目录下,而源文件在/usr/src/gtest目录下 也可以自己从https://googletest.googlecode.com上下载gtest的最新版本,不过google code网站经常被墙,到时候可以考虑从别的地方下载。
比如对于1.6.0版本,wget gtest-1.6.0.zip https://googletest.googlecode.com/files/gtest-1.6.0.zip
然后解压:
假定下载到根目录下,直接:
- user@linux-name:~<span class="MathJax" id="MathJax-Element-29-Frame" tabindex="0" data-mathml="unzipgtest−1.6.0.zipuser@linux−name: " role="presentation" style="box-sizing: border-box; outline: 0px; display: inline; line-height: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; position: relative;">unzipgtest−1.6.0.zipuser@linux−name: unzipgtest−1.6.0.zipuser@linux−name: cd gtest-1.6.0
复制代码
另外,把下载的gtest源代码下面的include/gtest目录拷贝到全局头文件目录,如: - user@linux-name:~/gtest-1.6.0<span class="MathJax" id="MathJax-Element-30-Frame" tabindex="0" data-mathml="cp−rinclude/gtest/usr/local/include/或user@linux−name: /gtest−1.6.0" role="presentation" style="box-sizing: border-box; outline: 0px; display: inline; line-height: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; position: relative;">cp−rinclude/gtest/usr/local/include/或user@linux−name: /gtest−1.6.0cp−rinclude/gtest/usr/local/include/或user@linux−name: /gtest−1.6.0 cp -r include/gtest /usr/include/
复制代码
然后在用到gtest的文件中,用#include
- <font size="2">pragma once</font><p style="line-height: 26px;">int fun(int a, int b);</p><p style="line-height: 26px;">sample.cpp
- [cpp] view plain copy</p><font size="2">include”sample.h”</font><p style="line-height: 26px;">int fun(int a, int b)
- {
- return (a-b);
- }</p>
复制代码
test.cpp这里我们用了四种ASSERTION(断言)方法,给初学者一个印象,具体gtest的各种断言用法还要参考gtest文档
- <p style="line-height: 26px;">[cpp] view plain copy</p><font size="2">include “gtest\gtest.h”</font><font size="2">include “sample.h”</font><p style="line-height: 26px;">//TEST (gtest macro),fun:function name to test, “case1” test case name
- TEST(fun, case1)
- {
- EXPECT_LT(-2, fun(1, 2));
- EXPECT_EQ(-1, fun(1, 2));
- ASSERT_LT(-2, fun(1, 2));
- ASSERT_EQ(-1, fun(1, 2));
- }</p><p style="line-height: 26px;">/*
- int _tmain(int argc, _TCHAR* argv[])
- {
- testing::InitGoogleTest(&argc, argv);
- return RUN_ALL_TESTS();
- }
- */</p>
复制代码
Step3. 编译要测试的代码(假设文件名为sample.cpp) g++ -c sample.cpp
Step4. 编译单元测试的代码(假设文件名为test.cpp) g++ -c test.cpp
Step5. 与libgtest.a或其他需要的库链接、生成可执行程序 g++ test.o sample.o libgtest.a -o test -lpthread -lpthread是必须要有的,否则链接时会出错gtest-all.cc: - (.text._ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv[_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv]+0x7a): undefined reference to `pthread_setspecific’
复制代码
Step6. 运行生成的test文件,可输出测试结果。
|