如何使用CMake的CTest进行单元测试

这篇具有很好参考价值的文章主要介绍了如何使用CMake的CTest进行单元测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如何使用CMake和CTest进行单元测试。
CMake是一个跨平台的构建工具,可以自动生成与平台相关的Makefile或Visual Studio项目文件,简化了C++程序的构建过程。而CTest是CMake的测试工具,它可以自动化运行单元测试,收集测试结果并生成报告。

下面是使用CMake和CTest进行单元测试的步骤:

  • 编写C++程序代码和对应的单元测试代码。
  • 在CMakeLists.txt文件中添加测试目标(test target)和相关配置,如测试代码的编译选项、链接库等。
  • 运行CMake来生成Makefile或Visual Studio项目文件,包括测试目标。
    运行make或Visual Studio等构建工具来编译测试目标。
  • 运行ctest命令来自动化运行单元测试,并收集测试结果。
  • 可以使用CTest生成各种测试报告,如文本报告、XML报告、HTML报告等。
  • CTest的具体用法可以通过执行"ctest --help"查看CTest命令的帮助信息。

总的来说,CMake和CTest能够帮助C++程序员简化构建和测试过程,并提供各种工具来方便测试结果的收集和分析。
假设我们有一个简单的C++函数,计算两个整数的和,如下所示:

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

我们要编写一个单元测试,测试这个函数的正确性。首先在项目根目录下创建一个名为"CMakeLists.txt"的文件,并添加如下内容:

# 设置项目名称和版本号
project(my_project VERSION 1.0)

# 添加测试目录
add_subdirectory(tests)

接着,在"tests"目录下创建一个名为"CMakeLists.txt"的文件,并添加如下内容:

# 添加测试用例
add_executable(test_add test_add.cpp)

# 链接gtest库
find_package(GTest REQUIRED)
target_link_libraries(test_add GTest::GTest GTest::Main)

# 添加测试
add_test(NAME test_add COMMAND test_add)

其中,test_add.cpp是我们编写的测试用例代码,GTest是Google Test库,需要先安装并配置好环境。test_add.cpp的内容如下:

#include "gtest/gtest.h"

#include "../add.h"

TEST(addTest, testAdd) {
    EXPECT_EQ(add(1, 2), 3);
    EXPECT_EQ(add(0, 0), 0);
    EXPECT_EQ(add(-1, 1), 0);
}

int main(int argc, char** argv) {
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

其中,add.h是我们编写的函数头文件,保存了add函数的声明。在测试代码中,我们使用Google Test的宏EXPECT_EQ来断言add函数的返回值是否符合预期。

最后,我们可以在项目根目录下运行如下命令来生成Makefile并编译测试目标:

mkdir build && cd build
cmake ..
make

运行完上述命令后,可以在build目录下看到生成的可执行文件test_add和测试报告。我们可以运行如下命令来运行测试并查看测试报告:

ctest

这时,CTest会自动运行test_add测试,并在终端输出测试结果。如果测试通过,CTest的输出会显示"100% tests passed"的信息。如果测试失败,CTest会显示测试失败的详细信息。

这就是一个简单的使用CMake和CTest进行单元测试的示例。需要注意的是,实际使用时可能需要根据项目和需求进行适当调整和定制。

运行完CTest后,会输出测试结果的汇总信息,包括测试用例的执行情况、测试用例通过率、测试用例耗时等统计信息。如果有测试用例失败,还会输出详细的错误信息,以便于用户进行代码调试。

以下是一个简单的示例,假设我们有一个名为example的测试集,其中包含了两个测试用例addTest和subTest:

$ ctest -R example
Test project /home/user/my_project/build
      Start 1: addTest
 1/2 Test #1: addTest ......................   Passed    0.01 sec
      Start 2: subTest
 2/2 Test #2: subTest ......................   Passed    0.01 sec

100% tests passed, 0 tests failed out of 2

Total Test time (real) =   0.03 sec

在这个例子中,我们使用了ctest命令执行example测试集,使用了-R选项来指定只执行测试名称中包含example的测试用例。执行结果显示,测试集中的两个测试用例addTest和subTest都通过了测试,测试通过率为100%,总共耗时0.03秒。

如果有测试用例失败,输出结果如下所示:

$ ctest -R example
Test project /home/user/my_project/build
      Start 1: addTest
 1/2 Test #1: addTest ......................***Failed    0.01 sec
      Start 2: subTest
 2/2 Test #2: subTest ......................   Passed    0.01 sec

50% tests passed, 1 tests failed out of 2

Total Test time (real) =   0.03 sec

The following tests FAILED:
          1 - addTest (Failed)

在这个例子中,测试集中的addTest测试用例执行失败,输出了详细的错误信息。测试通过率为50%,总共耗时0.03秒。文章来源地址https://www.toymoban.com/news/detail-542939.html

到了这里,关于如何使用CMake的CTest进行单元测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • cmake + gtest安装使用 C++单元测试 gcov locv代码覆盖率

    CMakeLists.txt速查简单编写 打开–g3 选项,去掉-O2以上级别的代码优化选项;否则编译器会对代码做一些优化,例如行合并,从而影响行覆盖率结果; 这里我比较懒就没有加 加到test目录下的CMakeLists.txt即可 , 其中代码编译完之后会在test/CMakeFiles/test.dir/ 生成test.cpp.gcno文件, 在运

    2024年02月05日
    浏览(38)
  • C# 中的单元测试,如何使用单元测试进行程序测试和调试?

    单元测试是一种软件测试方法,用于测试单个功能或方法是否按预期工作。在 C# 中,可以使用 .NET 框架中的单元测试工具来编写和运行单元测试。 下面是使用 Visual Studio 内置的单元测试框架来创建一个简单的单元测试的步骤: 在 Visual Studio 中创建一个新的类库项目。 在新项

    2024年02月15日
    浏览(56)
  • 如何使用Jest进行单元测试

    Jest 是一种流行的 JavaScript 测试框架,它具有易用性和高效性。Jest 支持测试各种 JavaScript 应用程序,包括 React、Vue、Node.js 等。在本文中,我们将介绍如何使用 Jest 进行单元测试。 ## 1. 安装 Jest 首先,我们需要在项目中安装 Jest。可以使用 npm 或 yarn 安装 Jest: ``` npm install

    2024年02月10日
    浏览(33)
  • 如何使用PowerMock进行单元测试

    原博文:如何使用PowerMock进行单元测试 (techdatafuture.com) 持续更新 PowerMock是一个用于增强JUnit和TestNG的单元测试框架,它允许开发者在单元测试中模拟和修改代码中的静态方法、私有方法和构造函数。PowerMock基于Mockito和EasyMock,为Java开发者提供了一种更灵活、强大的测试工具

    2024年02月16日
    浏览(38)
  • Ubuntu中使用vscode+cmake引用第三方库进行编译调试

    在自己的项目中引用openCV和Eigen库。 opencv和Eigen库的编译安装参见上一篇文章https://blog.csdn.net/qq_41816368/article/details/130090823?spm=1001.2014.3001.5502#t4 其他的第三方库放在工作空间的thirdparty文件夹,项目编译时一起编译,不提前安装。 首先新建一个文件夹作为工作空间 在创建Thir

    2023年04月25日
    浏览(46)
  • Vscode使用cmake进行debug的配置教学(教你学会写json配置)

    目前csdn上很多的cmake配置,无论是用插件还是写json,都不太方便,经常配置不成功。 比如想要运行slambook里的一些代码,用传统的配置方案都是建立在工作区就在本文件夹创建。 这样的缺点有: 每次切换工作区都要重新配置,麻烦 每次增加外部连接库都要用pkg去find路径,

    2024年02月06日
    浏览(40)
  • Linux conan+cmake管理的项目如何进行多架构编译(x86_64及交叉编译arm64)

    Conan 和 CMake 是两个非常流行的跨平台开发工具,它们可以让开发者轻松管理依赖和构建项目,支持多种操作系统和架构。下面是一些关于 conan 和 cmake 的介绍: Conan Conan 是一个用于管理 C++ 依赖项的开源工具。它可以从公共或私有存储库中自动下载和安装依赖项。Conan 可以轻

    2024年02月09日
    浏览(41)
  • java常见面试题:如何使用Java进行单元测试?

    单元测试是软件开发中的一个重要环节,它确保每个单独的代码单元都能按照预期工作。以下是如何使用Java进行单元测试的详细说明: JUnit : JUnit是Java中最流行的单元测试框架。 首先,添加JUnit依赖到你的项目中。如果你使用Maven,可以在 pom.xml 中添加以下依赖: 复制代码

    2024年02月02日
    浏览(50)
  • [C++] 基础教程 - 如何使用google test进行单元测试

    https://download.csdn.net/download/u011775793/88601877 单元测试是一种软件测试方法,用于测试代码中的最小可测试单元。在软件开发中,我们通常将代码分解为多个模块或类,每个模块或类都有自己的功能和行为。单元测试的目的是确保每个模块或类都能正常工作,不会影响其他模块或

    2024年02月04日
    浏览(38)
  • 什么是 Jest ? Vue2 如何使用 Jest 进行单元测试?Vue2 使用 Jest 开发单元测试实例

    Jest 是一个流行的 JavaScript 测试框架,由 Facebook 开发并维护,专注于简单性和速度。它通常用于编写 JavaScript 和 TypeScript 应用程序的单元测试、集成测试和端到端测试。 特点: 简单易用: Jest 提供简洁的 API 和易于理解的语法,使得编写测试用例变得简单快捷。 零配置:

    2024年01月25日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包