linux下使用gtest框架进行c/c++测试-gtest环境搭建

一.前言
google test(以下简称gtest)是谷歌的开源C++单元测试框架,用来做c/c++的单元测试比较方便。下面对于它在linux下的使用环境搭建做简单介绍。

二.准备gtest框架
在github网站下载gtest框架
https://github.com/google/googletest
解压后的目录结构如下:

danny@danny:~/Learing/googletest/googletest-master$ ls -lh
total 56K
-rw-r--r-- 1 danny danny 5.8K Jul  1 01:33 BUILD.bazel
-rw-r--r-- 1 danny danny  927 Jul  8 19:21 CMakeLists.txt
-rw-r--r-- 1 danny danny 5.6K Jul  1 01:33 CONTRIBUTING.md
-rw-r--r-- 1 danny danny 2.2K Jul  1 01:33 CONTRIBUTORS
-rw-r--r-- 1 danny danny 1.5K Jul  1 01:33 LICENSE
-rw-r--r-- 1 danny danny 4.6K Jul  1 01:33 README.md
-rw-r--r-- 1 danny danny 1.1K Jul  1 01:33 WORKSPACE
drwxr-xr-x 2 danny danny 4.0K Jul  1 01:33 ci
drwxr-xr-x 7 danny danny 4.0K Jul  1 01:33 docs
drwxr-xr-x 8 danny danny 4.0K Jul  1 01:33 googlemock
drwxr-xr-x 9 danny danny 4.0K Jul  1 01:33 googletest

1.解压到自定义目录,为了方便,将googletest-master/CMakeList.txt中的option(BUILD_SHARED_LIBS “Build shared libraries.” OFF)中的OFF改为ON以生成动态链接库。否则默认是为静态库。

2.使用cmake编译

cd googletest-master
mkdir build
cd build
cmake ..
make

会有如下的输出:

danny@danny:~/Learing/googletest/googletest-master/build$ make
Scanning dependencies of target gtest
[ 12%] Building CXX object googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
[ 25%] Linking CXX shared library ../lib/libgtest.so
[ 25%] Built target gtest
Scanning dependencies of target gmock
[ 37%] Building CXX object googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o
[ 50%] Linking CXX shared library ../lib/libgmock.so
[ 50%] Built target gmock
Scanning dependencies of target gmock_main
[ 62%] Building CXX object googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o
[ 75%] Linking CXX shared library ../lib/libgmock_main.so
[ 75%] Built target gmock_main
Scanning dependencies of target gtest_main
[ 87%] Building CXX object googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o
[100%] Linking CXX shared library ../lib/libgtest_main.so
[100%] Built target gtest_main
danny@danny:~/Learing/googletest/googletest-master/build$ 

共享库就可以生成了的。

3.在编译完成后,进行头文件和动态链接文件的配置,具体命令如下:

sudo mkdir /usr/lib/gtest
cd googletest-master/build/lib
sudo cp *.so /usr/lib/gtest/
cd googletest-master/googletest/include
sudo cp ./gtest /usr/include/gtest -R
sudo chmod 755 /usr/lib/gtest/*.so
sudo chmod 755 /usr/include/gtest -R

到此,Gtest就算配置完成,可以在C++程序中以动态链接库的方式使用。

三.实际案例

项目结构如下:

danny@danny:~/Learing/googletest/TestCase$ tree
.
|-- CMakeLists.txt
|-- main.cpp
|-- test
|   `-- StringUtilTest.cpp
`-- utils
    |-- StringUtil.cpp
    |-- StringUtil.h
    |-- TestUtil.cpp
    `-- TestUtil.h

2 directories, 7 files

main.cpp

#include "TestUtil.h"  
 
int main(int argc, char** argv)  
{  
   TestUtil::runTests(argc, argv);  
   return 0;  
}

StringUtilTest.cpp

#include "StringUtil.h"  
#include <gtest/gtest.h>  
#include <string>  
 
using namespace std;  
 
TEST(StringUtilTest, getTestString)  
{  
    StringUtil* str = new StringUtil();  
    EXPECT_EQ("Hello,world!", str->getTestString());  
    delete str;  
}  

StringUtil.cpp

#include "StringUtil.h"  
 
using namespace std;  
StringUtil::StringUtil()  
{  
}  
 
std::string StringUtil::getTestString()  
{  
    return string("Hello,world!");  
}  

StringUtil.h

#ifndef STRINGUTIL_H  
#define STRINGUTIL_H  
#include <string>  
 
class StringUtil  
{  
public:  
    StringUtil();  
 
    std::string getTestString();  
};  
 
#endif // STRINGUTIL_H

TestUtil.cpp

#include "TestUtil.h"  
# include <gtest/gtest.h>  
 
int TestUtil::runTests(int argc, char **argv)  
{  
    testing::InitGoogleTest(&argc, argv);  
    return RUN_ALL_TESTS();  
}  

TestUtil.h

#ifndef TESTUTIL_H  
#define TESTUTIL_H  
#include <string>  
 
class TestUtil  
{  
public:  
    static int runTests(int argc, char **argv);  
 
private:  
    TestUtil(){}  
};  
 
#endif // TESTUTIL_H

CMakeLists.txt

#basic setting  
PROJECT(TestCpp)  
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)  
#SET(CMAKE_BUILD_TYPE Debug)  
 
#header files  
SET(HEADER_FILES_PATH  
./utils  
./test  
)  
INCLUDE_DIRECTORIES(${HEADER_FILES_PATH})  
 
#src files  
AUX_SOURCE_DIRECTORY(. SRC_LIST)  
AUX_SOURCE_DIRECTORY(./utils SRC_LIST_1)  
LIST(APPEND SRC_LIST ${SRC_LIST_1})  
AUX_SOURCE_DIRECTORY(./test SRC_LIST_2)  
LIST(APPEND SRC_LIST ${SRC_LIST_2})  
 
#build setting  
LINK_DIRECTORIES(/usr/lib/gtest)  
ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_LIST})  
TARGET_LINK_LIBRARIES(${PROJECT_NAME} libgtest.so)  

运行

使用cmake编译运行即可看到对StringUtil的测试结果,命令如下:

cd TestCase
mkdir build  
cd build  
cmake ..  
make .  
./TestCpp  

运行结果如下:

danny@danny:~/Learing/googletest/TestCase/build$ ls
CMakeCache.txt  CMakeFiles  Makefile  TestCpp  cmake_install.cmake
danny@danny:~/Learing/googletest/TestCase/build$ ./TestCpp 
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from StringUtilTest
[ RUN      ] StringUtilTest.getTestString
[       OK ] StringUtilTest.getTestString (0 ms)
[----------] 1 test from StringUtilTest (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[  PASSED  ] 1 test.

测试代码见如下:
https://download.csdn.net/download/Danny_llp/20104592

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
首先,确保你已经安装了 GTest 框架。如果没有安装,请参考 GTest 官方文档进行安装。 接下来,假设你已经有一个名为 `my_project` 的 C++ 项目,并且该项目的根目录下已经有一个名为 `src` 的文件夹用于存放源代码,一个名为 `include` 的文件夹用于存放头文件。 1. 在项目根目录下创建一个名为 `test` 的文件夹,用于存放测试代码。 2. 在 `test` 目录下创建一个名为 `CMakeLists.txt` 的文件,并添加以下内容: ``` cmake_minimum_required(VERSION 3.10) project(my_project_tests) set(CMAKE_CXX_STANDARD 11) # 添加 GTest 库 find_package(GTest REQUIRED) include_directories(${GTEST_INCLUDE_DIRS}) # 添加测试文件 add_executable(my_project_tests test/test_main.cpp # 添加其他测试文件 ) # 链接 GTest 库 target_link_libraries(my_project_tests ${GTEST_LIBRARIES} pthread) # 添加测试 add_test(NAME my_project_tests COMMAND my_project_tests) ``` 这段代码使用 CMake 构建了一个名为 `my_project_tests` 的测试项目,并链接了 GTest 库,同时添加了一个名为 `my_project_tests` 的测试。请确保将 `test/test_main.cpp` 替换为你实际的测试文件。 3. 在 `test` 目录下创建一个名为 `test_main.cpp` 的文件,并添加以下内容: ``` #include <gtest/gtest.h> int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } ``` 这段代码是测试用例的入口文件,它使用 GTest 框架初始化测试环境,并运行所有测试用例。 4. 在 `test` 目录下创建一个名为 `test_sample.cpp` 的文件,并添加以下内容: ``` #include <gtest/gtest.h> TEST(SampleTest, Test1) { EXPECT_EQ(2 + 2, 4); } TEST(SampleTest, Test2) { EXPECT_TRUE(true); } ``` 这段代码是一个简单的测试用例,它包含两个测试。第一个测试用例测试 2 + 2 是否等于 4,第二个测试用例测试 true 是否为真。 5. 在项目根目录下打开终端,输入以下命令编译测试项目: ``` mkdir build cd build cmake .. make ``` 6. 运行测试用例,输入以下命令: ``` ./my_project_tests ``` 如果一切顺利,你应该能够看到测试结果输出: ``` [==========] Running 2 tests from 1 test suite. [----------] Global test environment set-up. [----------] 2 tests from SampleTest [ RUN ] SampleTest.Test1 [ OK ] SampleTest.Test1 (0 ms) [ RUN ] SampleTest.Test2 [ OK ] SampleTest.Test2 (0 ms) [----------] 2 tests from SampleTest (0 ms total) [----------] Global test environment tear-down [==========] 2 tests from 1 test suite ran. (0 ms total) [ PASSED ] 2 tests. ``` 这就是如何将 GTest 框架加入到你的 C++ 项目中进行单元测试

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值