Linux下Google Test测试环境安装和使用,实战总结


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:~$ unzip gtest-1.6.0.zip
user@linux-name:~$ cd gtest-1.6.0


另外,把下载的gtest源代码下面的include/gtest目录拷贝到全局头文件目录,如:


user@linux-name:~/gtest-1.6.0$ cp -r include/gtest/ /usr/local/include/

user@linux-name:~/gtest-1.6.0$ cp -r include/gtest/ /usr/include/
然后在用到gtest的文件中,用#include <gtest/gtest.h>指令就可以让编译器找到gtest的头文件了。


Step2.编译gtest的链接库,因为原则上这个链接库是不能下载的,最好本地编译一份用:


执行
user@linux-name:~/gtest-1.6.0$ g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -c ./src/gtest-all.cc
会在当前目录产生gtest-all.o


${GTEST_DIR}表示Gtest源文件路径,这里如果当前目录就是源文件路径,${GTEST_DIR}用"./"
-I指定的两个搜索路径可以去掉,因为所需要的头文件都已经放到系统的include下和当前路径下了。 (g++ ./src/gtest-all.cc )


然后


~/gtest-1.6.0$ g++ -I./include -I./ -c ./src/gtest_main.cc


会在当前目录产生gtest_main.o,这个不是必须的,这里面包含了gtest代码里提供的一个默认的main函数(执行RUN_ALL_TESTS()),所以链接到自己写的测试函数里,可以不用在test文件里写main函数,如有特殊需要,还是得自己写main函数。


然后把两个编译输出文件合并成一个静态库libgtest.a,可以拿出来,便于放到以后的gtest工程下链接用。
~/gtest-1.6.0$ ar -rv libgtest.a gtest-all.o gtest_main.o


然后开始尝试写第一个测试,这里就是和普通的linux C++开发步骤一样。我们可以用gtest里提供的sample来实验,也可以自己写一个很简单的测试。


sample.h

//sample.h
#pragma once
int fun(int a, int b);


sample.cpp

#include"sample.h"
int fun(int a, int b)  
{  
    return (a-b);  
}  


test.cpp这里我们用了四种ASSERTION(断言)方法,给初学者一个印象,具体gtest的各种断言用法还要参考gtest文档
#include "gtest\gtest.h"  
#include "sample.h"
  
 //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));  
}  
  
/*
int _tmain(int argc, _TCHAR* argv[])  
{  
    testing::InitGoogleTest(&argc, argv);  
    return RUN_ALL_TESTS();  
} 
*/




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文件,可输出测试结果。


参考文章:


Linux平台如何编译使用Google test写的单元测试?  


gtest编译sample文件出错


Linux环境下配置Google Test、TBB、OpenMP和OpenCV


ubuntu下使用google test的一些注意事项  





你可能感兴趣的:(C++,linux,Google,单元测试,跨平台)