当前位置:

首页 > 编程开发 > C++如何在CMake中添加单元测试

C++如何在CMake中添加单元测试

首先通过FetchContent引入GoogleTest,再编写测试用例并创建测试可执行文件,接着用enable_testing()和add_test()注册测试,最后通过ctest运行测试。完整流程包括:1.在CMakeLists.txt中使用FetchContent下载gtest;2.编写被测函数及gtest测试代码;3.配置target_link_libraries链接gtest_main和pthread;4.调用enable_testing()并注册测试目标;5.构建后运行ctest执行测试。关键

首先通过FetchContent引入Google Test,再编写测试用例并创建测试可执行文件,接着用enable_testing()和add_test()注册测试,最后通过ctest运行测试。完整流程包括:1. 在CMakeLists.txt中使用FetchContent下载gtest;2. 编写被测函数及gtest测试代码;3. 配置target_link_libraries链接gtest_main和pthread;4. 调用enable_testing()并注册测试目标;5. 构建后运行ctest执行测试。关键点为正确链接库和启用测试功能。

c++怎么在CMake中添加单元测试_c++构建系统与测试集成方法

在C++项目中使用CMake集成单元测试,是提升代码质量的关键步骤。主流做法是借助Google Test(gtest)框架,并通过CMake的CTest系统管理测试用例。下面介绍如何配置。

1. 安装并引入Google Test

Google Test是C++中最常用的单元测试框架。推荐通过CMake的FetchContent自动下载并编译,避免手动安装依赖。

在CMakeLists.txt中添加:

include(FetchContent)

FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip )

set(BUILD_TESTING OFF CACHE INTERNAL "禁用gtest自带的示例") FetchContent_MakeAvailable(googletest)

2. 编写测试代码

假设你的项目有一个函数需要测试:

// math_utils.h
#pragma once
int add(int a, int b);

// math_utils.cpp

include "math_utils.h"

int add(int a, int b) { return a + b; }

编写对应的测试文件:

// tests/test_math.cpp
#include 
#include "math_utils.h"

TEST(MathTest, AddFunction) { EXPECT_EQ(add(2, 3), 5); EXPECT_EQ(add(-1, 1), 0); }

3. 配置CMake构建测试可执行文件

在项目根目录或tests/子目录下的CMakeLists.txt中添加测试目标:

enable_testing()

add_executable(test_runner tests/test_math.cpp) target_link_libraries(test_runner gtest_main gtest pthread)

注册到CTest

add_test( NAME MathTest_AddFunction COMMAND test_runner )

enable_testing()启用测试支持,add_test()将可执行文件注册为一个测试项。

4. 运行测试

构建项目后,使用ctest命令运行测试:

mkdir build && cd build
cmake ..
make
ctest

输出会显示测试是否通过。加上-V参数可查看详细日志:

ctest -V

也可以直接运行测试程序调试:

./test_runner

基本上就这些。只要把gtest集成好,写好测试用例,再让CMake生成并注册测试目标,就能实现自动化测试流程。不复杂但容易忽略细节,比如忘记enable_testing()或链接pthread库。确保每一步都配对,测试就能顺利跑起来。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 单元测试
相关文章 更多
Java测试中怎么使用Mockito模拟依赖对象
Java测试中怎么使用Mockito模拟依赖对象

详细讲解在Java单元测试中如何使用Mockito模拟依赖对象,包括引入依赖、创建Mock、打桩返回值、行为验证以及Mock与Spy的核心差异和常见陷阱排查。

junit怎么用零基础完成第一个单元测试教程
junit怎么用零基础完成第一个单元测试教程

适合初学者的JUnit入门指南,详解如何配置环境、编写首个测试用例、使用断言验证结果,并分析单元测试的适用场景与例外情况。

junit的基本用法教程及实例演示
junit的基本用法教程及实例演示

详解JUnit测试框架的基本用法,包括@Test注解、常用断言方法及测试生命周期,配合完整代码实例,帮助Java开发者高效编写和维护单元测试。

Python单元测试怎么写?新手必看指南
Python单元测试怎么写?新手必看指南

单元测试通过验证代码各部分的正确性来确保质量,Python中常用unittest和pytest框架,unittest适合大型项目,pytest更灵活适用于小型项目;最佳实践包括测试驱动开发、高覆盖率、测试独立性与可读性、及时更新测试及使用mocking隔离外部依赖,如用unittest.mock模拟数据库连接,确保测试不受外部环境影响,专注于逻辑验证。

vcpkg+CMake跨平台构建方案详解
vcpkg+CMake跨平台构建方案详解

搭建基于vcpkg和CMake的跨平台构建流水线的核心在于利用vcpkg管理依赖,CMake组织构建流程,从而实现代码在不同操作系统和编译器上的自动化编译和测试。1.安装配置vcpkg:克隆仓库并运行引导脚本,设置VCPKG_ROOT环境变量,可选地将vcpkg加入PATH;2.创建CMakeLists.txt:指定最低版本、项目名称、引入vcpkg工具链、查找并链接所需库;3.使用vcpkg安装依赖:根据平台架构执行如vcpkginstallboost:x64-windows或x64-linux等命令;

PHP实时输出单元测试方法
PHP实时输出单元测试方法

答案是通过输出缓冲捕获并断言内容。使用ob_start()和ob_get_clean()捕获输出,验证内容顺序与完整性,结合回调函数模拟分段输出,提升可测性。

Golang单元测试怎么写?最佳实践分享
Golang单元测试怎么写?最佳实践分享

Golang单元测试是用代码验证代码是否按预期工作,以发现bug、提高质量并支持重构。其核心解决方案依赖标准库testing,流程包括:1.创建以\_test.go结尾的测试文件;2.编写以Test开头、含*testing.T参数的测试函数;3.使用t.Errorf等方法进行断言;4.运行gotest命令执行测试。为提升可维护性,应采用清晰命名、覆盖边界条件、减少重复代码、使用表驱动测试。对于外部依赖,可通过gomock框架定义接口、生成Mock对象、设置预期行为并注入测试代码中。并发测试可用sync.W

Golang反射机制在单元测试中的应用
Golang反射机制在单元测试中的应用

反射在Go测试中用于处理类型不确定的场景,如验证函数签名、比较私有字段、动态调用方法和构造通用测试函数,提升测试灵活性但需避免滥用。

Golang单元测试:mockgen与接口隔离技巧
Golang单元测试:mockgen与接口隔离技巧

如何使用mockgen生成Mock对象?使用mockgen生成Mock对象的步骤如下:1.安装mockgen:goinstallgo.uber.org/mock/mockgen@latest;2.定义接口,如UserProvider接口定义GetUser方法;3.执行命令生成Mock代码:mockgen-source=user.go-destination=mock/user_provider_mock.go-package=mockUserProvider;4.在测试中导入并使用生成的Mock对象替换真

Java单元测试方法及常用框架介绍
Java单元测试方法及常用框架介绍

单元测试是验证Java代码逻辑正确性的关键手段,其核心目的是确保每个独立功能正确运行。它能提前发现问题、增强重构信心并提供文档作用。常用的框架有JUnit(主流,支持嵌套测试)、TestNG(适合复杂结构)、Mockito(模拟对象库)和AssertJ(增强断言)。以JUnit为例,编写步骤包括:1.添加依赖;2.创建测试类;3.编写带@Test注解的测试方法并用断言验证结果。实用建议包括命名清晰、测试独立、合理使用Mockito与AssertJ、关注关键逻辑而非仅覆盖率。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Postman macOS版
Postman macOS版
Mac

Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

Docker Desktop macOS版
Docker Desktop macOS版
Mac

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

Android Studio macOS版
Android Studio macOS版
Mac

Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

WINDOWS 更多
Postman Windows版
Postman Windows版
Windows

Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

Docker Desktop Windows版
Docker Desktop Windows版
Windows

Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。

Android Studio Windows版
Android Studio Windows版
Windows

Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,