Ubuntu18.04环境下Gtest框架安装测试

准备

在安装Gtest框架之前在linux上安装好cmke、g++工具。
sudo apt-get install cmake
sudo apt-get install g++

方法一:下载Gtest压缩包解压安装

最新版本的Gtest下载链接:https://github.com/google/googletest
可以选择自己下载解压安装,下载的安装包为.ZIP文件时,下载unzip工具进行解压。

sudo apt-get install unzip
unzip 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 ..
make
sudo make install

安装完成之后,查看/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测试结果
Gtest框架安装完成。

方法二:使用apt-get工具安装

刚刚接触Gtest时,在Ubuntu18.04环境下使用方法一安装,安装之后对Gtest框架进行测试时存在版本不兼容的问题,测试源码编译之后无法链接-lgtest和-lgtest_main库。
在这里插入图片描述
这里介绍第二种解决办法,使用apt-get工具安装。

sudo apt-get install libgtest-dev

进入/usr/src目录下查看是否存在gtest和googlegtest文件夹,如果存在并且可以访问则进入下一步,否则可以卸载重新安装:sudo apt-get autoremove libgtest-dev

但是使用这个方法也遇到了方法一种-lgtest和-lgtest_main不兼容的问题,可以在安装命令行之后添加cmake约束。

sudo apt-get install libgtest-dev cmake
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make
sudo cp *.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 case 1: small numbers
    if (n <= 1) return false;

    // Trivial case 2: 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 3
    for (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) return false;
    }
    // n has no integer factor in the range (1, n), and thus is prime.
    return true;
}

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头文件和静态库成功。

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值