准备
在安装Gtest框架之前在linux上安装好cmke、g++工具。
sudoapt-getinstall cmake
sudoapt-getinstall g++
方法一:下载Gtest压缩包解压安装
最新版本的Gtest下载链接:https://github.com/google/googletest
可以选择自己下载解压安装,下载的安装包为.ZIP文件时,下载unzip工具进行解压。
sudoapt-getinstallunzipunzip googlegtest-xxx.zip
也可以创建一个文件夹使用命令行自动打包下载,一般习惯创建一个新的文件夹作为下载目录。
cd /
mkdir ./workspace
cd workspace
git clone https://github.com/google/googletest
下载之后进入googletest文件夹,新建一个文件夹build用于存放相关make操作会生成的文件和静态库。
cd googlegtest-xxx
mkdir build
cd build
cmake ..makesudomakeinstall
安装完成之后,查看/usr/local/lib路径下是否存在libgtest.a和libgtest_main.a文件,可以手动copy。
cp /workspace/googlegtest-xxx/build/lib/libgtest*.a /usr/local/lib
对安装好的gtest框架进行测试。
新建一个文件夹用于存放gtest测试源码
mkdir /workspace/test_unit &&cd /workspace/build
vim gtest.cpp
使用vim编辑器之前需要安装vim,
sudo apt-get install vim
测试样例
gtest.cpp
:
#include <gtest/gtest.h>
int add(int a ,int b){return a+b;}
TEST(Operations,ADD){
EXPECT_EQ(6,add(2,4));
EXPECT_EQ(8,add(3,5));
EXPECT_EQ(17,add(9,9));
EXPECT_EQ(0,add(1,1));}
int main(int argc,char **argv){
testing::InitGoogleTest(&argc,argv);return RUN_ALL_TESTS();}
编译运行:
g++ gtest.cpp -lgtest -lpthread -o gtest
运行结果:
Gtest框架安装完成。
方法二:使用apt-get工具安装
刚刚接触Gtest时,在Ubuntu18.04环境下使用方法一安装,安装之后对Gtest框架进行测试时存在版本不兼容的问题,测试源码编译之后无法链接-lgtest和-lgtest_main库。
这里介绍第二种解决办法,使用apt-get工具安装。
sudoapt-getinstall libgtest-dev
进入/usr/src目录下查看是否存在gtest和googlegtest文件夹,如果存在并且可以访问则进入下一步,否则可以卸载重新安装:
sudo apt-get autoremove libgtest-dev
但是使用这个方法也遇到了方法一种-lgtest和-lgtest_main不兼容的问题,可以在安装命令行之后添加cmake约束。
sudoapt-getinstall libgtest-dev cmake
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudomakesudocp *.a /usr/lib
安装完成,可以按照方法一中的样例进行测试。
方法三、直接使用gtest的头文件和生成的静态库进行单元测试
新建一个文件夹,然后下载gtest源码,使用cmake和make生成gtest静态库。
cd /
mkdir ./workspace
cd workspace
git clone https://github.com/google/googletest
cd googletest
mkdir build
cmake ..make
在
/googletest/googletest/include/gtest
目录下是gtest的头文件,在
/googletest/build/lib
目录下是gtest生成的静态库
*.a
文件。
在
/workspace
下新建文件夹
test_unit
作为项目总路径。
项目文件目录
|--test_unit
||| +--gtest.cpp
||| +--include
| +--gtest
| +--*.h
||| +--lib
| +--*.a
下载后,将gtets的头文件和静态库复制到test_unit相应的路径下。
cd /workspace
mkdir test_unit &&cd test_unit
mkdir lib
mkdir include
cp-rf /workspace/googletest/googletest/include/gtest ./include
cp /workspace/googletest/build/lib/*.a ./lib
gtest.cpp的样例代码:
#include<gtest/gtest.h>
// Returns true iff n is a prime number.
bool IsPrime(int n){
// Trivial case1: small numbers
if(n <=1)returnfalse;
// Trivial case2: even numbers
if(n % 2==0)return n ==2;
// Now, we have that n is odd and n >=3.
// Try to divide n by every odd number i, starting from 3for(int i =3;; i +=2){
// We only have to try i up to the squre root of n
if(i > n/i)break;
// Now, we have i <= n/i < n.
// If n is divisible by i, n is not prime.
if(n % i ==0)returnfalse;}
// n has no integer factor in the range (1, n), and thus is prime.
returntrue;}
class IsPrimeParamTest : public::testing::TestWithParam<int>{};
TEST_P(IsPrimeParamTest, HandleTrueReturn){
int n = GetParam();
EXPECT_TRUE(IsPrime(n));}
INSTANTIATE_TEST_CASE_P(TrueReturn, IsPrimeParamTest, testing::Values(3, 5, 11, 16 ,19 ,21 , 23, 17));
手动链接gtest的头文件和静态库:
g++ gtest.cpp -I ./include/gtest -L ./lib -lgtest_main-lgtest-lpthread-o gtest
其中
g++ -I
为编译程序按照
-I
指定的路径去搜索头文件;
g++ -L
为编译程序按照
-L
指定的路进去寻找库文件。
测试结果为:
直接调用Gtest头文件和静态库成功。
版权归原作者 没有上岸_ 所有, 如有侵权,请联系我们删除。