背景

在letcode练习c++算法题时,每次都要修改main方法调用写的方法,这样对于一个大型项目来说是不合理的,单元测试不应该通过修改main入口函数来测试。
于是研究了下googletest,终于做出了第一个demo,github地址。

googletest使用

目录结构:

.
├── CMakeLists.txt
├── googletest
│ ├── 省略
├── main.cpp
├── src
│ ├── CMakeLists.txt
│ └── util
│  ├── operate.cpp
│  └── operate.h
└── test
 ├── CMakeLists.txt
 └── src
  ├── CMakeLists.txt
  └── util
            ├── CMakeLists.txt
            ├── operate_test.cpp
            └── util_test.cpp

要测试的类为operate.cpp,于是test目录下创建了与src同级的目录,添加operate_test.cpp单元测试类。

引入googletest步骤:

  1. 从github下载googletest并且解压
  2. 将解压后的googletest文件复制到工程目录下
  3. 创建test文件,测试用例在test文件下编写
  4. 创建src文件,项目文件在src下编写
  5. 在src创建util目录,模拟单元模块
  6. util目录下创建了一个class,其内容如下

operate.h

#ifndef LETCODE_OPERATE_H
#define LETCODE_OPERATE_Hclass operate {public:int twoSum(int one, int two);
};#endif //LETCODE_OPERATE_H

operate.cpp

#include "operate.h"int operate::twoSum(int one, int two) {return one + two;
}
  1. 在src下面编写 CMakeLists.txt 文件,将util下的类打包成一个lib,叫做src
aux_source_directory(. src_files)aux_source_directory(util src_files)add_library(src ${src_files})
  1. 在工程根路径下创建main.cpp,为项目的入口函数
#include <iostream>
#include "src/util/operate.h"int main() {operate f1;int result = f1.twoSum(1, 2);std::cout << "result: " << result << std::endl;return 0;
}
  1. 再在工程根路径创建CMakeLists.txt文件(如果想要执行看看结果,把)add_subdirectory("test")注释掉就可以运行了)
# cmake_minimum_required(VERSION <specify CMake version here>)
project(letcode)set(CMAKE_CXX_STANDARD 11)add_subdirectory("src")
add_subdirectory("test")
add_subdirectory("googletest")#FILE(GLOB_RECURSE TEST_SRC "${CMAKE_SOURCE_DIR}/*.cpp" "${CMAKE_SOURCE_DIR}/*.h")enable_testing()
include_directories(${CMAKE_SOURCE_DIR}/googletest/googletest/include)add_executable(${PROJECT_NAME} main.cpp)target_link_libraries(${PROJECT_NAME} src gtest_main)
  1. 在test目录下创建src/util文件夹,等会儿测试用例将会编写在test/src/util下
  2. 在test/src/util目录创建CMakeLists.txt、operate_test.cpp、util_test.cpp文件,其中operate_test.cpp里面编写的是测试用例,util_test.cpp是测试用力的入口函数

util_test.cpp

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

operate_test.cpp

#include <gtest/gtest.h>
#include "src/util/operate.h"TEST(utilTestCase, testTwoSum){operate op;EXPECT_EQ(op.twoSum(2,3),5);
}

CMakeLists.txt

project(SrcUtilTest)set(CMAKE_CXX_STANDARD 11)include_directories(${CMAKE_SOURCE_DIR})
include_directories(${CMAKE_SOURCE_DIR}/googletest/googletest/include)# 读取当前目录及子目录的所有头文件和源文件,存储到 TEST_SRC_UTIL 变量中
FILE(GLOB_RECURSE TEST_SRC_UTIL "*.cpp" "*.h")add_executable(${PROJECT_NAME} ${TEST_SRC_UTIL})target_link_libraries(${PROJECT_NAME} src gtest_main)
  1. 在 test/src下创建CMakeLists.txt文件,将test/src/util下的文件添加进项目
add_subdirectory("util")
  1. 在 test目录下创建CMakeLists.txt,将test/src下的文件添加进项目
add_subdirectory("src")
  1. 在工程根目录创建 build 文件夹
  2. cd build
  3. cmake ..
  4. make
  5. ./test/src/util/SrcUtilTest 执行编译好的二进制文件,执行当前目录下的所有单元测试用例,结果如下,测试用例执行成功。

    如果不想手敲代码,见github地址。

c++ cmake 项目 引入 googletest相关推荐

  1. Windows 中使用 VS2019 开发 CMake 项目

    文章目录 0. 前言 1. 使用 VS2019 编译 SPDLOG 2. 在 VS2019 中创建 CMake 项目引入 SPDLOG 0. 前言 目标:使用 VS2019 构建 CMake 项目,或 ...

  2. 使用cmake配置aws-cpp-sdk以及在cmake项目中使用

    目录 环境 配置cmake 编译aws-cpp-sdk 1.使用git bash下载aws-cpp-sdk项目到指定目录 2. 使用clion打开项目 3. 设置cmake编译选项 4. BUILD& ...

  3. Swift项目引入第三方库的方法

     分类: iOS(55)  目录(?)[+] Swift项目引入第三方库的方法 转自 http://blog.shiqichan.com/How-To-Import-3rd-Lib-Into-Swif ...

  4. 【Visual Studio 2019】创建 导入 CMake 项目

    文章目录 I . 创建 CMake 项目 II . 导入 CMake 项目 III 打开新项目 生成解决方案 出错 首先按照上一篇博客 [Visual Studio]Visual Studio 201 ...

  5. jar包打补丁 jar -uf_maven项目引入本地jar包的方法

    maven项目引入本地jar包的方法 标签:maven 当maven项目中从中央仓库中找到不到某些Jar包,或者想把自己开发的Jar文件引入到项目中使用.可以把Jar包上传maven中央仓库或自建的私 ...

  6. (转)通过maven,给没有pom文件的jar包生成pom文件,maven项目引入本地jar包

    文章完全转载自 : https://blog.csdn.net/qq_31289187/article/details/81117478 问题一: 经常遇到公司私服或者中央仓库没有的jar包,然后通过 ...

  7. vue项目引入CNZZ数据专家(方法汇总篇)

    vue项目引入CNZZ数据专家(方法汇总篇) 很多网站都有cnzz数据统计,用于分析网站页面受访情况. 今天就来备注一下开发经验: vue如何集成cnzz数据专家进行受访记录? 友盟+CNZZ官方文档 ...

  8. Windows 平台下基于MinGW和Qt 的OpenCV 之CMake 项目配置

    1. MinGW 编译OpenCV 参考其他教程 2. 添加系统环境变量 OpenCV_DIR 如果有执行 mingw32-make install, 则为 build 目录下install 文件的完 ...

  9. maven项目引入新依赖问题

    title: maven项目引入新依赖问题 tags: Maven categories: 工作日志 date: 2017-05-25 18:18:55 前一篇描述过关于版本号没有写明确,写了rele ...

最新文章

  1. Docker是个啥?
  2. VINS-Mono关键知识点总结——预积分和后端优化IMU部分
  3. libsvm 数据预处理 模块化程序
  4. asp.net甘特图控件exG2antt介绍及免费下载
  5. mysql数据库分表备份脚本_mysql 分库分表备份脚本
  6. 打不开/dev/vmmon:断裂管道_湖北加工管道式自卸除铁器厂家询价咨询_国凯环保设备...
  7. 前17名最喜欢的操作系统黑客(2017年名单)
  8. Bootstrap3 滚动监听插件的选项
  9. free() 是如何释放不同内存区块大小的指针?
  10. keil接收别人发的工程打不开_STM32工程模板建立之 KEIL 开发平台设置(一)
  11. 瑞友天翼服务器ip地址怎么修改,怎么修改这个IP地址
  12. Java代码规范之编程规约
  13. 高斯公式积分matlab,数值分析 高斯—勒让德积分公式
  14. 【踩坑专栏】主机文件复制到虚拟机
  15. 2010~2011手机CPU对比
  16. 小菜的Scala学习笔记,主要部分更新完成
  17. MATLAB中peaks函数的用法
  18. 关于ubuntu自带英文版firefox浏览器,安装evernote剪藏插件总是登录到国际版及firefox插件无法下载
  19. Weather API 天气应用 API调用分享
  20. NBA现役球员季后赛总得分排名前十都有谁?

热门文章

  1. 1028: 积少成多(2级)小林和小树兄弟俩相约存零钱。眼看到年底了,兄弟俩决定算算一共存了多少钱,请帮他们算出来。
  2. 【数据结构】KMP算法
  3. 使用MNIST数据集并显示一些图片
  4. GMT 6.0绘制指针图/GMT绘制指南针/指北针
  5. 分享自己的终端diy显示的banner
  6. JumpServer安装
  7. KubeVirt在360的探索之路
  8. asl-fingerspelling比赛规则
  9. Blender源码探究之布料解算(一)——源码定位
  10. 后进者网络:电子商务网站如何做好优化工作