首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用Catch2测试我的CMake静态库项目?

Catch2是一个开源的C++测试框架,用于测试CMake静态库项目非常方便。下面是使用Catch2测试CMake静态库项目的步骤:

  1. 下载和安装Catch2:可以在Catch2的官方网站(https://github.com/catchorg/Catch2)上找到最新的源代码和安装指南。按照指南进行安装。
  2. 创建测试文件:在你的CMake项目的根目录下,创建一个名为"test"的文件夹,用于存放测试相关的文件。
  3. 编写测试用例:在"test"文件夹中,创建一个名为"test.cpp"的文件,用于编写测试用例。在该文件中,你可以使用Catch2提供的宏和断言来编写各种测试情况。以下是一个简单的示例:
代码语言:txt
复制
#include <catch2/catch.hpp>
#include "mylibrary.h"

TEST_CASE("Test add function", "[add]") {
    REQUIRE(add(2, 3) == 5);
    REQUIRE(add(0, 0) == 0);
    REQUIRE(add(-1, 1) == 0);
}

// 添加更多的测试用例...

在上面的示例中,我们测试了一个名为"add"的函数,使用了Catch2的宏TEST_CASE来定义测试用例,REQUIRE用于断言测试结果。

  1. 编写CMakeLists.txt:在项目根目录下的CMakeLists.txt文件中,添加以下内容来启用测试:
代码语言:txt
复制
# 添加Catch2库的路径
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/test")

# 添加测试执行目标
enable_testing()
add_executable(tests test/test.cpp)
target_link_libraries(tests PRIVATE mylibrary Catch2::Catch2)

# 注册测试
include(CTest)
include(Catch)
catch_discover_tests(tests)

在上述代码中,我们使用enable_testing()来启用测试功能,然后创建了一个名为"tests"的可执行目标,链接了我们的静态库和Catch2库。最后,使用catch_discover_tests将测试目标注册到CTest中。

  1. 构建和运行测试:使用CMake生成构建文件,并构建测试目标。在项目根目录下执行以下命令:
代码语言:txt
复制
mkdir build
cd build
cmake ..
cmake --build .

构建完成后,可以直接运行可执行文件"tests",或者使用CTest来运行测试:

代码语言:txt
复制
ctest

Catch2会自动执行所有测试用例并生成详细的测试报告。

以上是使用Catch2测试CMake静态库项目的基本步骤。使用Catch2可以轻松地编写各种测试用例,并提供丰富的断言和测试辅助函数。希望这些信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

cmake:使用find_package查找libjpeg静态

https://blog.csdn.net/10km/article/details/82931978 我们知道简单使用命令find_package可以查找指定package....对于经常会用到 jpegturbojpeg,可以用find_package(JPEG REQUIRED)来查找。...默认查找到是动态,所以如果想查找libjpeg静态,这样是不行。...其实FindJPEG.cmake脚本在设计时已经考虑到了这个问题,如下是FindJPEG.cmake脚本代码片段,可以看到调用者可以通过JPEG_NAMES这个变量指定优先查找到名字。...所以如果想要指定优先使用静态,前面的cmake脚本可以稍改一下,如下,就是在调用find_package之前设置JPEG_NAMES为想要静态名: # 查找libjpeg,优先使用静态 if(

1.8K20
  • CC++生态工具链——单元测试工具Catch2简介

    由于BDD使用非常简单语言来描述测试过程,更方便沟通和迭代,使产品经理、开发者和测试者都可以深入了解项目的进展,使开发出来产品可以快速响应用户反馈和需求。...这个”拿捏“手势就是Catch2官方logo Catch2特性 仅使用头文件就可以完成测试样例构建,无其他依赖。 支持自注册函数。...Catch2安装和CMake集成 1.安装Catch2方式 (1).直接下载头文件,然后直接在项目使用头文件。...将Catch2完整项目代码导出成依赖Catch2::Catch2Catch2::Catch2WithMain两个依赖),然后用target_link_libraries函数链接这两个依赖。...依赖放在子目录下(比如lib文件夹)时,使用add_subdirectory(lib/Catch2)。

    1.7K20

    面向 C++ 现代 CMake 教程(三)

    我们将讨论对象文件内部结构,如何进行重定位和引用解析,以及它们用途。我们将讨论最终可执行文件与其组件区别以及系统如何构建进程映像。 然后,我们将向您介绍各种——静态、共享和共享模块。...让我们来看看每种类型,了解它们是如何工作静态 要构建一个静态,我们可以简单地使用我们在前面章节中已经看到命令: add_library( [...])...如果我们想无论如何都构建一个静态,我们可以提供一个显式关键字: add_library( STATIC [...]) 静态是什么?...现在我们已经知道了如何链接,我们可以检索外部并将其用于我们 CMake 项目中。在下一章中,我们将学习如何CMake 中管理依赖关系。...选择它们原因如下: Catch2 是一个相对容易学习、得到良好支持和文档项目。它提供了简单测试用例,但同时也提供了用于行为驱动开发(BDD)优雅宏。

    52500

    CMake 秘籍(三)

    在本章中,我们将演示如何测试集成到 CMake 构建结构中,使用流行测试和框架,并牢记以下目标: 让用户、开发者和持续集成服务轻松运行测试套件。...一个现代且流行测试Catch2(github.com/catchorg/Catch2)。这个测试框架一个很好特点是它可以作为单个头文件包含在你项目中,这使得编译和更新框架特别容易。...如何做 为了使用 Catch2 ,我们将修改前一个配方CMakeLists.txt,执行以下步骤: 我们可以保持CMakeLists.txt大部分内容不变: # set minimum cmake...我们从第一章,从简单可执行文件到第三部分,构建和链接静态和共享讨论中回忆起,IMPORTEDCMake 提供伪目标,用于表示预先存在依赖关系及其使用要求。...准备就绪 我们将展示如何提取包含 Eigen 存档,并使用提取源文件来编译我们项目

    57820

    【可测试性实践】C++ 单元测试&代码覆盖率统计

    引言 最近在调研C++工程怎么做单元测试和代码覆盖率统计,由于我们工程有使用Boost,尝试使用Boost.Test来实现单元测试并通过Gcov和Lcov来生成代码覆盖率报告。...缺点: Mock功能需要额外(如Google Mock)。 Catch2: 优点: 代码简洁,测试代码可读性强,单头文件,集成方便。 缺点: Mock功能需要额外。...Boost.Test: 优点: 功能强大,丰富断言和测试功能,兼容Boost。 缺点: 学习曲线较陡,文档虽然丰富但略显复杂。 CppUnit: 优点: 基础功能稳定,适合老项目。...使用Boost.Test框架实现单元测试 假设你工程使用是Boost,可以通过Boost.Test来实现单元测试。...BOOST_AUTO_TEST_CASE(test_add) 定义一个测试用例。 使用gcov + lcov统计代码覆盖率 准备工作 确保已经安装以下工具: CMake:用于构建项目

    14910

    图森未来-算法后端平台二面(pass)

    哈喽~,大家好,是千羽。 下面分享认识一位大佬华中科技大学985硕,图森未来-算法后端平台二面实习。 1、动态链接与静态链接之间区别?...内存使用静态链接程序体积会相对大一些,如果静态有更新的话,所有可执行文件都得重新链接才能用上新静态。而动态链接则允许多个程序共享同一段代码,而不需要在磁盘上存储多个拷贝。...使用CMake或Make管理项目的优点包括: 自动化构建:CMake和Make都能自动化处理构建过程,减少了手动编写构建脚本需求,使得项目构建更加便捷和高效。...社区支持:CMake得到了广泛社区支持,很多开源项目使用CMake作为构建工具,因此可以方便地找到相关文档、教程和第三方。而Make虽然也有一定社区支持,但相比CMake略显不足。...集成测试工具:CMake可以方便地集成测试工具,例如Google Test、Catch2等,使得测试更加便捷和自动化。而Make则需要手动编写测试脚本。

    17910

    C++那些事之项目Catch2

    C++那些事之项目Catch2 今天推荐一个值得学习开源项目"Catch2" ,之前写过如何使用googlegoogletest编写单元测试,你会发现需要编译生成lib,比较麻烦,而Catch2...是一个Header only,能够快速使用,只需要引入header file,便可以直接使用,本节练习代码将会在星球提供,已在星球阅读下载即可,不在可以扫末尾二维码加入哦。...本节对应视频教程: 任何一个大型项目都需要单元测试,那么本节就来引入项目篇之快速单元测试系列之一Catch2Catch2是一个功能丰富C++测试框架,用于编写单元测试、集成测试和功能测试。...它是一个开源项目,旨在提供简洁、直观和强大测试编写和执行体验。 使用Catch2可以轻松编写和组织测试用例,并提供丰富断言和测试宏来验证代码行为和预期输出。...最后,值得一提Catch2 v3版本出来了,最大变化是Catch2不再是一个单头,因此如果想只用一个header file,就下载v2版本吧。本节完!

    46440

    Go:如何使用标准testing基准测试功能

    基准测试是一种检测程序性能有效方法,特别是在Go语言中,它提供了一个强大标准来帮助开发者执行这些测试。本文将详细介绍如何使用Go标准来编写和运行基准测试,以及如何解读结果以优化代码。 1....b.N是由测试框架提供,表示测试应该运行次数。 2. 运行基准测试 要运行基准测试,可以使用go test命令并加上-bench标志。...以下是如何执行基准测试命令: bash go.exe test -benchmem -run=^$ -bench ^BenchmarkSum$ ....解读基准测试结果 执行基准测试后,我们会得到类似以下输出: 这里: BenchmarkSum-22 表示测试函数名,-22表示使用了22个CPU核心。...通过Go语言标准,开发者可以方便地编写和执行这些测试,进而根据测试结果调整和优化代码。理解和使用好这一工具,将有助于提高软件性能和质量。

    14910

    项目篇之手把手100行写一个简易版Mutex

    基于 POSIX 标准信号量实现,包含 Catch2 单元测试,附带了基于 Catch2 框架单元测试,用于验证互斥锁正确性和稳定性,使用bazel编译,google编码规范。...其中涉及C++知识(RAII、信号量、lock_guard、线程安全编程),还能学习以下内容: 1.Bazel构建系统:了解如何使用Bazel来管理和构建C++项目。...Bazel是一种高效、可扩展构建工具,可用于管理复杂项目结构、依赖关系和构建流程。 2.Catch2测试框架:掌握如何使用Catch2来编写单元测试。...Catch2是一个功能强大且易于使用C++测试框架,可以帮助你编写清晰、可读性高测试用例,提高代码质量和可靠性。 3.原子操作:了解原子操作概念和使用方法。...轻量级且易于使用:该互斥锁实现简单且易于集成到现有项目中,无需依赖复杂第三方或框架。 编译方式: 提供g++ 与bazel两种方式编译运行,方便快速学习。

    16130

    面向 C++ 现代 CMake 教程(五)

    第四章,使用目标工作: 在这里,我们强调了现代 CMake 项目如何广泛使用目标。我们项目也将如此,以下原因是: 定义几个和可执行文件(用于测试和生产)将使项目保持组织性并保持干燥....但由于该项目还提供了一个,我们将明确参考一些以下构建说明: 用于测试和开发静态 用于发布共享 本章概述了如何测试分离main(),我们也将这样做。...此外,在本章中,我们讨论了两个测试框架:Catch2 和 GTest 带 gMock;对于这个项目,我们将使用后者。为了获得清晰覆盖信息,我们将使用 LCOV 生成 HTML 报告。...共享静态 我们在第六章中简要介绍了这两种使用 CMake 链接。我们提到,总体内存使用对于使用相同共享多个程序可能更有利,并且用户可能已经拥有最流行,或者知道如何快速安装它们。...作为作者,我们可以决定是否提供静态或共享版本,或者我们可以简单地提供这两个版本,并将此决定留给使用我们程序员。我们在这里选择后一种方法(只是为了看看它是如何完成)。

    13700

    【C++ 语言】Visual Studio 配置 POSIX 线程 ( Windows 不支持 POSIX | 配置文件下载 | 文件说明 | 配置过程 )

    文件 , 在 Android , Linux 上动态是 .so 文件 ; ② lib 静态文件说明 : 在 Windows 上静态有两种 , 一种只是单纯起到引导作用 , 引导如何去链接 dll...CMake 配置 静态 : 用于引导如何链接动态静态 , 这里配置自动根据当前是 32 位还是 64 位程序 , 确定静态配置目录 ; #配置自动根据当前是 32 位还是 64 位程序 ,...确定静态配置目录 if(CMAKE_CL_64) set(platform x64) else() set(platform x86) endif() #配置静态 , 用于引导如何链接动态静态...\Windows\SysWOW64 目录下 ; 配置代码测试 ---- 线程使用代码 : // 005_Thread.cpp: 定义应用程序入口点。...CMake 项目,在此处包括源代码并定义 # 项目特定逻辑。

    1.2K10

    如何在公司项目使用ESLint来提升代码质量

    为什么我们要在项目使用ESLint ESLint可以校验我们写代码,给代码定义一个规范,项目代码必须按照这个规范写。...还有就是在跟团队协作时候,每个人都保持同一个风格进行代码书写,这样团队内部相互去看别人代码时候,就可以更容易看懂。 ESLint实战小技巧全揭秘 那么ESLint如何使用呢?...一般来说,我们项目在前期没有加入ESLint时候,后期我们加入了之后跑一下,基本上都会出现非常多报错,一执行检查就是满屏error和warning,简直是丧心病狂不堪入目~ 如何让ESLint自动修复报错...怎么在项目中预处理错误,eslint-loader来帮忙 希望在项目开发过程当中,每次修改代码,它都能够自动进行ESLint检查。...所以一般来说,我们用webpack和babel来进行开发项目,都会指定它parser使用babel-eslint。

    2.1K80

    CMake---优雅构建CC++软件项目实践(1)

    首先说明是本篇文章不从cmake整个语法上去讲述,而是从一个实际项目的构建上入手,去了解如何优雅去构建一个软件项目,搭建一个C/C++软件项目基本依赖组件,最后形成一个构建C/C++软件项目的模板...涉及到有: cmake变量作用域? cmake数据结构? 宏函数与函数? 如何去构建动静态和找到这些如何去实现支持多平台项目构建? 如何去构建一个应用?...如何实现项目的最后install? 如何很友好去展示构建过程各种级别信息? 如何适配cmake-gui,采用友好ccmake或者cmake-gui实现构建?...这里概括性说明下常用cmake知识,总的来说cmake作用就是让我们找到依赖头文件和文件,去编译源文件、链接目标文件(静态也是目标文件一个集合),最后生成可执行文件或动/静态: INCLUDE_DIRECTORIES...不过这个操作谨慎使用,因为在android平台jni依赖带版本是无法找到

    8.4K52

    CMake用法,这篇文章讲全了

    CMake以其强大跨平台能力成为众多开发者构建项目的首选工具。无论是简单单文件项目,还是复杂多文件、多文件夹乃至集成第三方大型工程,CMake都能游刃有余。...单文件 假设工程中只有main.cpp一个文件,文件夹布局如下: . ├── CMakeLists.txt └── main.cpp 那么该如何使用书写其CMakeLists文件呢,如下为一个简单CMakeLists.txt...(${PROJECT_NAME} funclib) # 添加静态目标 如上示例模拟了文件和测试程序构建,其中source文件夹存放代码,Test文件夹生成测试代码。...引用第三方(动态+静态) 针对于同时依赖静态和动态场景,需要在链接阶段找到lib,同时需要在运行阶段找到dll。...同时,通过file命令复制动态到输出目录。 总结 本文结合实际场景讲解CMakeLists.txt文件组织,包括单文件、多文件、多文件夹项目构建,以及如何灵活地集成和管理第三方

    14810

    学习了CC++,居然不了解Cmake这一利器

    CMake 是一个跨平台自动化建构系统,可以用简单命令来控制软件编译过程。下面是一个关于如何使用 CMake 进行项目配置和编译教程。...编译目标:静态、动态、可执行文件 这里我们需要做有以下任务: 把 math 路径下编译成静态; 将 main.c 编译成可执行文件,并依赖math 静态; 将 test 路径下测试源文件编译成执行文件...1、编译静态 首先,我们需要将 src/c/math 路径下源文件编译成静态。先使用 file 或者 set 命令获取源文件路径下文件列表,再通过 add_library 命令来编译静态。...add_library:用于定义一个目标,这里定义了一个名为 math ,STATIC 表示静态,动态使用 SHARED。...并使用这些 .c 文件作为源文件,创建一个名为 math 静态

    13710
    领券