51Testing软件测试论坛

标题: google test 安装 [打印本页]

作者: 测试积点老人    时间: 2018-12-26 16:29
标题: google test 安装
本帖最后由 测试积点老人 于 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


然后解压:
假定下载到根目录下,直接:

  1. 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目录拷贝到全局头文件目录,如:

  1. 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

  1. <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
  2. [cpp] view plain copy</p><font size="2">include”sample.h”</font><p style="line-height: 26px;">int fun(int a, int b)
  3. {
  4. return (a-b);
  5. }</p>
复制代码

test.cpp这里我们用了四种ASSERTION(断言)方法,给初学者一个印象,具体gtest的各种断言用法还要参考gtest文档

  1. <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
  2. TEST(fun, case1)
  3. {
  4. EXPECT_LT(-2, fun(1, 2));
  5. EXPECT_EQ(-1, fun(1, 2));
  6. ASSERT_LT(-2, fun(1, 2));
  7. ASSERT_EQ(-1, fun(1, 2));
  8. }</p><p style="line-height: 26px;">/*
  9. int _tmain(int argc, _TCHAR* argv[])
  10. {
  11. testing::InitGoogleTest(&argc, argv);
  12. return RUN_ALL_TESTS();
  13. }
  14. */</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:

  1. (.text._ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv[_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv]+0x7a): undefined reference to `pthread_setspecific’
复制代码

Step6. 运行生成的test文件,可输出测试结果。







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2