CMake C++开发 windows 下 googletest 模板项目教程搭建
Cmake C++开发 windows 下 googletest 模板项目教程搭建
首先有了之前CMake VS code C++ 开发环境搭建后,这节教程详细讲解,怎么让自己的项目集成googletest 模块。好方便自己进行功能自测。我们都知道项目周期过程中,测试占用很重要的一个环节。
项目开发和自测试之间存在密切的关系。自测试是项目开发中的一个重要环节,旨在确保开发的软件或系统在功能和质量方面达到预期的标准。
自测试通常包括以下几个方面:
单元测试:针对软件的最小功能单元(如函数、方法)进行测试,以验证其行为是否符合预期。单元测试通常由开发人员编写并运行。
集成测试:在单元测试之后,将多个功能单元组合在一起进行测试,以验证它们的集成是否正常工作。集成测试可以帮助发现不同模块之间的交互问题。
自测试的目的是及早发现和修复软件中的问题,提高软件的质量和可靠性。通过自测试,开发团队可以更好地掌握软件的状态,并及时解决潜在的缺陷和错误。
在项目开发过程中,自测试应该与开发紧密结合,测试用例应该根据软件的需求和设计来编写,并在开发过程中逐步执行。自动化测试工具和框架googletest 也可以帮助开发团队更高。
(1)下载googletest 源码包
下载地址:Releases · google/googletest · GitHub
选择版本:https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip
你也可以选择其他版本进行集成。下载好,先存放好在自己的电脑磁盘里面,后面用。本教程假定,我们的模板项目集成了googletest 源码,后面会一同编译。
接下来进行后续项目时,前提请确保CMake+gcc+ vs code 开发环境已经搭建OK.
(2)创建一个cmake 项目
创建一个项目,名称叫:gtest-demo-template-basic,新建文件 CMakeLists.txt 文件,编写内容如下:
# cmake的最小版本号,对应的还有max, 设置项目的cmake最低要求版本
cmake_minimum_required(VERSION 3.12)
# 项目名称:倒没什么影响,但是cmake会默认设置一些变量,所以
project(gtest_demo)
# 包含GTest的库文件, 这里是个相对路径
add_subdirectory(googletest)
# 包含的目录,这样就能用 #include <gtest/gtest.h>, 这里可以对比find_package()方法,有技巧的哦
include_directories(googletest/include)
# 添加一个测试:名称和可执行文件
add_executable(mytests mytests.cpp)
# 链接库文件,必须在上一句的后面,会有依赖关系的
target_link_libraries(mytests PRIVATE gtest)
将第一步下载准备好的 googletest源码包解压到改目录内gtest-demo-template-basic/,并且命名为 googletest
(3) 编写测试类API
编写测试接口方法,后面你将会使用googletest 来进行对这些方法进行单元测试。
新建头文件 myfunction.h ,里面定义两个方法,一个是add,一个是sub 这两个方法很简单,但是对于满足googletest 原理已经基本够用了。
#ifndef _ADD_H
#define _ADD_H
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
#endif
(4)编写单元测试文件cpp
有了测试目标,然后我们就可以进行测试了,测试这两个接口,编写单元测试案例相关函数。
#include <gtest/gtest.h>
#include "myfunctions.h"
TEST(myfunctions, add)
{
GTEST_ASSERT_EQ(add(10, 22), 32);
}
TEST(myfunctions, sub)
{
GTEST_ASSERT_EQ(sub(22,10), 12);
}
int main(int argc, char* argv[])
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
里面具体函数描述如下:
使用 Google Test(gtest)框架编写程序,用于对名为
myfunctions.h中的函数进行单元测试。下面是各个函数的功能和代码段的含义:
#include <gtest/gtest.h>:包含了Google Test 框架的头文件,以便在程序中使用 Google Test 的功能。
#include "myfunctions.h":包含了名为myfunctions.h的头文件,该文件中应该包含了待测试的函数的声明或定义。
TEST(myfunctions, add):定义一个名为myfunctions的测试套件,并在其中定义了一个名为add的测试用例。测试用例用于测试add函数的功能。
GTEST_ASSERT_EQ(add(10, 22), 32):使用断言宏GTEST_ASSERT_EQ,对add(10, 22)的返回值进行断言,判断其是否等于期望值32。如果断言失败,将会输出错误信息。
TEST(myfunctions, sub):定义了一个名为sub的测试用例,用于测试sub函数的功能。
GTEST_ASSERT_EQ(sub(22,10), 12):使用断言宏GTEST_ASSERT_EQ,对sub(22,10)的返回值进行断言,判断其是否等于期望值12。
::testing::InitGoogleTest(&argc, argv):初始化 Google Test 框架,将命令行参数传递给框架。
return RUN_ALL_TESTS():运行所有的测试用例,并返回测试结果。使用 Google Test 框架来测试
myfunctions.h中的add和sub函数的功能是否符合预期。在测试中,使用断言来验证函数的返回值与期望值是否相等。如果所有的测试用例都通过,RUN_ALL_TESTS()将返回0,表示测试通过;否则,将返回非零值,表示测试失败。
(5)项目整体结构

(6)单元测试报告输出内容
执行编译后,成功后,再执行run 后,整个单元测试案例输出结果如下:
PS C:\Drive\gtest-demo-template-basic\build> ."C:/Drive/gtest-demo-template-basic/build/mytests.exe"
[==========] Running 2 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 2 tests from myfunctions
[ RUN ] myfunctions.add
[ OK ] myfunctions.add (0 ms)
[ RUN ] myfunctions.sub
[ OK ] myfunctions.sub (0 ms)
[----------] 2 tests from myfunctions (12 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test case ran. (51 ms total)
[ PASSED ] 2 tests.
PS C:\D_Drive\OSS\gtest-demo-template-basic\build>
从报告中可以快速看出来,是否有案例测试没有通过,而且还可以对同一个函数进行多条件单元测试,定义多个测试案例。
(7)总结
这个基于CMake+googletest的测试项目模板项目后续会上传到csdn ,方便用户进行下载,配置运行。如果对于里面涉及到的依赖安装包下载有困难的小伙伴,可以在评论区留言,这边提供下载到国内的网盘进行加速。
更多推荐

所有评论(0)