添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
爱看书的核桃  ·  python ...·  10 月前    · 
俊逸的围巾  ·  mysql8.0 ...·  1 年前    · 
精明的皮带  ·  linux - sftp using ...·  2 年前    · 

gtest和gmock是什么和功能以及用法可参考以下两篇文章,都相当给力!

gtest

《玩转Google开源C++单元测试框架Google Test系列(gtest)(总)》
http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html

gmock

《Google Mock 入门概述》
http://www.cnblogs.com/welkinwalker/archive/2011/11/29/2267225.html

这篇文章主要想讲的就是如何在Linux下编译gtest&gmock的代码,并且在cmake工程中配置它。

编译gtest&gmock

首先,下载代码,地址如下:
https://github.com/google/googletest
第二步,下载完成后用unzip命令解压代码;
第三步,解压完成后,进入目录,利用g++来编译代码,命令如下:
gtest

    g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
        -pthread -c ${GTEST_DIR}/src/gtest-all.cc
    ar -rv libgtest.a gtest-all.o
Note that (We need `-pthread` as Google Test uses threads.)

gmock

    g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
        -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \
        -pthread -c ${GTEST_DIR}/src/gtest-all.cc
    g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
        -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \
        -pthread -c ${GMOCK_DIR}/src/gmock-all.cc
    ar -rv libgmock.a gtest-all.o gmock-all.o

其中,GTEST_DIR、GMOCK_DIR就是代码的位置。

配置Cmake工程

第一步,在工程目录下创建lib文件夹和include文件夹;
第二步,把GTEST_DIR和GMOCK_DIR目录下的include文件夹复制到工程的include中,以及把之前编译的libgmock.a和libgtest.a复制到lib下;
第三步,在CMakeLists.txt中添加相应代码,例如:

cmake_minimum_required(VERSION 3.2)
project(gtest_test)
LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib )
INCLUDE_DIRECTORIES(  ${PROJECT_SOURCE_DIR}/include )
add_executable(gtest_test Foomain.cpp)
#下面这条语句中,链接了gmock、gtest以及pthread
#pthread是必要的,因为前两者会用到
TARGET_LINK_LIBRARIES(gtest_test gmock gtest pthread)
install(TARGETS gtest_test RUNTIME DESTINATION bin)

这样就成功配置好了一个CMake工程!

公司的项目采用gtest来进行单元测试(其实之前华为海思也是用gtest,但大厂的好处(或者也可以说坏处- dog head)就是不需要关心这些事情),需要安装gtest; 我是在docker下安装的,步骤应该是一样的; 通过git来下载,源码安装: git clone https://github.com/google/googletest 下载后会在下载命令的目录下生成一个 googletest 的文件夹,进入后,通过cmake来编译,先后输入下面的3个命令并执行:
1. 前言 近期组里项目代码出于后期测试和长期维护的考虑,需要集成测试框架和用例补全,现有开源测试框架里面,google的test框架对于C++项目的支持度较高,且官方文档的完善性也高,便于上手,所以选用gtest这一套。 2. gtest环境搭建 下载地址: https://github.com/google/googletest/ 环境搭建: Git下来的源码里面包含了googletest和googlemock的文件夹,如果是做简单的gtest学习可以直接cmake编译就可以直接使用。如果需要加入到自己
最近在做一些C++相关事情,用的是C++编译成so库,最后引入到android播放器当中的,为了对C++代码进行快速迭代以及做性能测试,准备引入GTEST一个google出品的C++测试库,以及google/benchmark库用来做性能测试 找到一种方便的安装方式,不会引入额外的文件 总共需要3个cmakelist文件 CMakeLists.gtest CMakeLists.benchmark CMakeLists.txt: 主项目的CMakeLists.txt文件 # CMakeLists.g
尝试定位 (GMock) 库和包含文件的 finder 模块。 (此文件几乎是原始 FindGTest.cmake 文件的副本,您可以按原样使用它或根据自己的需要对其进行修改。) 接受以下变量作为输入: GMOCK_ROOT -(作为 CMake 或环境变量)gmock 安装前缀的根目录 GMOCK_MSVC_SEARCH - 如果使用 MSVC 编译,则可以将此变量设置为“MD”或“MT”以启用搜索 gmock 构建树(默认值:“MD”) 定义的变量 定义以下变量: GMOCK_FOUND - 找到了 Google 测试框架 GMOCK_INCLUDE_DIRS - 包括目录 还将下面的库变量定义为普通变量。 当找到调试库时,这些包含调试/优化关键字。 GMOCK_BOTH_LIBRARIES - libgmock 和 libgmo
### 使用 CMake 3.30 编译 gTest 动态库 为了使用 CMake 3.30 版本编译 Google Test (gtest) 动态库,需要遵循一系列配置和构建过程。以下是详细的指南: #### 准备工作环境 确保已经安装了所需的依赖项以及适当版本的 CMake。 对于 Linux 系统(以 Ubuntu 为例),更新软件包列表并安装必要的开发工具[^4]: ```bash sudo apt update && sudo apt install build-essential cmake 确认当前使用CMake 版本满足需求。如果未达到所需版本,则需下载特定版本的 CMake 并按照官方文档进行安装[^3]。 #### 获取 gtest 源码 可以从 GitHub 上获取最新版本的 gtest 或者指定分支/标签下的源代码。这里假设克隆整个仓库到本地目录 `~/projects/gtest` 中: ```bash git clone https://github.com/google/googletest.git ~/projects/gtest cd ~/projects/gtest #### 创建独立于源文件的构建目录 创建一个新的子目录用于存放生成的目标文件和其他中间产物,这有助于保持项目结构清晰整洁。 ```bash mkdir -p ~/projects/gtest/build && cd $_ #### 配置 CMake 构建选项 通过设置 `-DBUILD_SHARED_LIBS=ON` 参数告知 CMake 将要构建共享库而非静态库;同时指明期望输出的位置以及其他可能影响行为的关键参数。 ```bash cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_GMOCK=OFF \ # 只编译 gtest 而不是完整的 googletest 套件 -DBUILD_SHARED_LIBS=ON # 启用动态链接库支持 此时会读取顶层 CMakeLists.txt 文件中的指令,并基于给定条件解析出具体的编译规则。注意这里的路径应当指向实际存放 gtest 源代码的地方。 #### 执行编译操作 一旦完成了上述准备工作之后就可以调用 make 工具启动真正的编译流程了。考虑到多核处理器的优势建议加上 `-jN` 参数加速处理速度(N 表示 CPU 核心数加一通常是个不错的选择)[^1]: ```bash make -j$(nproc) #### 安装编译好的库 最后一步就是把新产生的 .so 文件复制至系统的标准位置以便后续程序能够顺利找到它们。当然也可以选择不执行此步而是在运行时显式提供完整路径。 ```bash sudo make install 以上就是在 CMake 3.30 下面针对 gtest 实施的一套典型做法。需要注意的是具体细节可能会因为操作系统差异等因素有所变化,请参照官方手册调整相应部分。