c++ cmake 项目 引入 googletest
背景
在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步骤:
- 从github下载googletest并且解压
- 将解压后的googletest文件复制到工程目录下
- 创建test文件,测试用例在test文件下编写
- 创建src文件,项目文件在src下编写
- 在src创建util目录,模拟单元模块
- 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;
}
- 在src下面编写 CMakeLists.txt 文件,将util下的类打包成一个lib,叫做src
aux_source_directory(. src_files)aux_source_directory(util src_files)add_library(src ${src_files})
- 在工程根路径下创建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;
}
- 再在工程根路径创建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)
- 在test目录下创建src/util文件夹,等会儿测试用例将会编写在test/src/util下
- 在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)
- 在 test/src下创建CMakeLists.txt文件,将test/src/util下的文件添加进项目
add_subdirectory("util")
- 在 test目录下创建CMakeLists.txt,将test/src下的文件添加进项目
add_subdirectory("src")
- 在工程根目录创建 build 文件夹
cd build
cmake ..
make
./test/src/util/SrcUtilTest
执行编译好的二进制文件,执行当前目录下的所有单元测试用例,结果如下,测试用例执行成功。
如果不想手敲代码,见github地址。
c++ cmake 项目 引入 googletest相关推荐
- Windows 中使用 VS2019 开发 CMake 项目
文章目录 0. 前言 1. 使用 VS2019 编译 SPDLOG 2. 在 VS2019 中创建 CMake 项目引入 SPDLOG 0. 前言 目标:使用 VS2019 构建 CMake 项目,或 ...
- 使用cmake配置aws-cpp-sdk以及在cmake项目中使用
目录 环境 配置cmake 编译aws-cpp-sdk 1.使用git bash下载aws-cpp-sdk项目到指定目录 2. 使用clion打开项目 3. 设置cmake编译选项 4. BUILD& ...
- Swift项目引入第三方库的方法
分类: iOS(55) 目录(?)[+] Swift项目引入第三方库的方法 转自 http://blog.shiqichan.com/How-To-Import-3rd-Lib-Into-Swif ...
- 【Visual Studio 2019】创建 导入 CMake 项目
文章目录 I . 创建 CMake 项目 II . 导入 CMake 项目 III 打开新项目 生成解决方案 出错 首先按照上一篇博客 [Visual Studio]Visual Studio 201 ...
- jar包打补丁 jar -uf_maven项目引入本地jar包的方法
maven项目引入本地jar包的方法 标签:maven 当maven项目中从中央仓库中找到不到某些Jar包,或者想把自己开发的Jar文件引入到项目中使用.可以把Jar包上传maven中央仓库或自建的私 ...
- (转)通过maven,给没有pom文件的jar包生成pom文件,maven项目引入本地jar包
文章完全转载自 : https://blog.csdn.net/qq_31289187/article/details/81117478 问题一: 经常遇到公司私服或者中央仓库没有的jar包,然后通过 ...
- vue项目引入CNZZ数据专家(方法汇总篇)
vue项目引入CNZZ数据专家(方法汇总篇) 很多网站都有cnzz数据统计,用于分析网站页面受访情况. 今天就来备注一下开发经验: vue如何集成cnzz数据专家进行受访记录? 友盟+CNZZ官方文档 ...
- Windows 平台下基于MinGW和Qt 的OpenCV 之CMake 项目配置
1. MinGW 编译OpenCV 参考其他教程 2. 添加系统环境变量 OpenCV_DIR 如果有执行 mingw32-make install, 则为 build 目录下install 文件的完 ...
- maven项目引入新依赖问题
title: maven项目引入新依赖问题 tags: Maven categories: 工作日志 date: 2017-05-25 18:18:55 前一篇描述过关于版本号没有写明确,写了rele ...
最新文章
- Docker是个啥?
- VINS-Mono关键知识点总结——预积分和后端优化IMU部分
- libsvm 数据预处理 模块化程序
- asp.net甘特图控件exG2antt介绍及免费下载
- mysql数据库分表备份脚本_mysql 分库分表备份脚本
- 打不开/dev/vmmon:断裂管道_湖北加工管道式自卸除铁器厂家询价咨询_国凯环保设备...
- 前17名最喜欢的操作系统黑客(2017年名单)
- Bootstrap3 滚动监听插件的选项
- free() 是如何释放不同内存区块大小的指针?
- keil接收别人发的工程打不开_STM32工程模板建立之 KEIL 开发平台设置(一)
- 瑞友天翼服务器ip地址怎么修改,怎么修改这个IP地址
- Java代码规范之编程规约
- 高斯公式积分matlab,数值分析 高斯—勒让德积分公式
- 【踩坑专栏】主机文件复制到虚拟机
- 2010~2011手机CPU对比
- 小菜的Scala学习笔记,主要部分更新完成
- MATLAB中peaks函数的用法
- 关于ubuntu自带英文版firefox浏览器,安装evernote剪藏插件总是登录到国际版及firefox插件无法下载
- Weather API 天气应用 API调用分享
- NBA现役球员季后赛总得分排名前十都有谁?