在安装Gtest框架之前在linux上安装好cmke、g++工具。
sudo apt-get install cmake
sudo apt-get install g++
最新版本的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
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时,在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源码,使用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
// 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头文件和静态库成功。