单元测试作为构建的一部分

2024-04-04

我有一个 CMake 项目,分为三个部分:

  1. 我的库的编译
  2. 编译许多单元测试程序来测试这些库的每个精确子部分
  3. 使用这些库编译程序示例

My question is about the 2nd part. My unit tests executables are short binary programs with a main returning 0 on success, 1 on fail. I would like to integrate their running as part of the build.

是否可以使用 CMake 来执行这两个解决方案之一:

  • 运行每个单元测试程序并检查返回值,如果失败则生成错误。
  • 生成一个测试脚本,该脚本将运行并检查每个单元测试程序,并检查返回值以在任何失败时产生错误。

我并不是在寻找完整的 CMake 脚本代码,通过相应文档的链接简单说明可能发生的情况就足够了。


看到类似的问题和我的回答here https://stackoverflow.com/questions/29456950/global-custom-target-in-cmake.

主要我的建议是添加一个POST_BUILD步骤到运行的单元测试目标ctest. If a POST_BUILD步骤确实失败(返回码不为0),构建将失败。

就像是:

set(UNIT_TEST MyLibUnitTestTargetName)
add_test(NAME ${UNIT_TEST} COMMAND ${UNIT_TEST})
add_custom_command(
     TARGET ${UNIT_TEST}
     COMMENT "Run tests"
     POST_BUILD 
     WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
     COMMAND ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION> -R "^${UNIT_TEST}$" --output-on-failures
)

这样做的优点是它的运行方式就像您调用的那样ctest.

简短版本 - 不带add_test() / ctest- 将会:

set(UNIT_TEST MyLibUnitTestTargetName)
add_custom_command(
     TARGET ${UNIT_TEST}
     COMMENT "Run tests"
     POST_BUILD 
     COMMAND ${UNIT_TEST}
)

参考:

  • add_test() https://cmake.org/cmake/help/v3.3/command/add_test.html
  • add_custom_command() https://cmake.org/cmake/help/v3.3/command/add_custom_command.html
  • 使用 cmake 构建项目后如何运行 ctest https://stackoverflow.com/questions/15115075/how-to-run-ctest-after-building-my-project-with-cmake
  • CMake:作为构建的一部分运行单元测试 https://cmake.org/pipermail/cmake/2011-September/046218.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单元测试作为构建的一部分 的相关文章

  • 自动化 Windows UI 测试方法

    我们正在寻求设置自动化 UI 测试 并想知道最好的方法是什么 潜在的陷阱是什么 设置费用是否昂贵 提前致谢 B 自动化测试最大的消耗可能是时间 有很多非常昂贵的工具 但也有免费的工具 即使是昂贵的工具的成本也不太可能与正确设置自动化测试所需
  • 如何对 Django 视图进行单元测试?

    我想开始将单元测试集成到我的 Django 项目中 并且我发现对视图进行单元测试很棘手 因为 Django 使用函数实现视图的方式 例如 如果函数有 URL 则每个函数都是 Django 中的视图 页面 如何对 Django 视图进行单元测
  • 存储库本身通常不经过测试?

    抱歉 我对存储库模式 单元测试和 orm 工具还不熟悉 我一直在研究单元测试和存储库模式 并得出一些结论 我想知道我是否正确 存储库模式有助于在使用它的控制器中替换单元测试 例如 对吧 因为创建上下文 在 EF 中 或会话 在 NH 中 的
  • cmake 和视觉工作室

    海湾合作委员会 4 4 2 Visual Studio C 2008 我一直在linux上使用cmake 没有任何问题 现在我已经通过应用程序移植到 Windows 上运行 我使用 cmake G Visual Studio 9 2008
  • CMake:不要为链接中使用的单个库设置 rpath

    我想要做的是配置我的 CMakeLists 文件 以便在构建我的项目时 链接器使用驻留在我的构建树中的共享库 so 的副本来链接可执行文件 但不会在中设置 rpath链接的可执行文件 以便系统必须在加载程序请求时提供该库 具体来说 我想在构
  • 有没有一种方法可以在不测试整个应用程序的情况下对类库(通用 Windows)进行单元测试?

    我需要进行单元测试Class Library Universal Windows 但是从 添加新项目 窗口中 我只看到了这一点 该项目使用应用程序容器运行所有测试 它始终打开一个应用程序 由于我不需要所有这些开销 我想知道是否有一种方法可以
  • 如何对 Slim 框架应用程序进行单元测试

    我一直在尝试对修改其他人代码的示例进行单元测试 每次我到达测试运行时都没有错误的程度 当我期望它们通过时 我只是遇到相同的失败 网上没有大量文档 我真的不知道还能去哪里 任何人都可以看到我的代码哪里出错了 bootstrap php php
  • JUnit、测试和线程

    当我连续运行多个 JUnit 测试时 JUnit 是否为每次执行创建一个新线程 或者所有内容都包装在一个线程中 Thanks 这一切都在一个线程上 您没有说明如何调用测试 但例如 运行 TestSuite 将按顺序运行套件中的所有测试 如果
  • 设置 CMake OBJECT 库的输出目录

    在我的 CMake 文件中 我指定了一个对象库 add library core OBJECT sourcefiles 我在共享库中进一步引用了这组目标文件 add library sharedlib SHARED
  • 如何在 Windows 中使用 cmake 更轻松地链接 gtk 库?

    我现在通过手动包含所有必需的路径 gtk包位于D Tools gtk bundle 2 20 0 20100406 win32 include directories D Tools gtk bundle 2 20 0 20100406 w
  • 使用 Mockito 对 Runnable 进行单元测试

    我有这样的代码 我想为其编写单元测试 public class TestClass private final Executor executor private final Handler handler TestClass Execut
  • 使用 target_link_libraries 以绝对路径作为库路径进行平台库名称扩展?

    在 CMake 中使用 target link libraries 仅使用库名称 例如 target link library myProject SomeLibrary 将根据平台将 SomeLibrary 扩展为 SomeLibrary
  • 在什么情况下会在快速测试中使用expectationForNotification

    我有点困惑什么 什么时候做expectationForNotification as opposed to期望与描述 我无法在 swift 中找到任何明确的示例来说明您何时以及如何处理此调用 我假设它可能是为了测试通知 但看起来它可能只是整
  • MSTest:如何增加测试时间

    我有一个测试需要运行超过 1 分钟 VS2008 MSTest 测试是从 VisualStudio 启动的 const int TestTimeout 1 TestMethod Timeout 10 60 1000 10 minutes p
  • Angular 2 测试 - 获取 DOM 元素样式

    我想在 Angular 2 应用程序中测试隐藏显示按钮的功能 测试是用 Jasmine 编写的 所以我需要检查display相关元素的属性 我怎样才能使用 Angular 获得这个属性debugElement 测试代码 let input
  • 如何在 Python 中的每个单元测试之前和之后运行特定代码

    以下是我在文件中的测试的结构 Class setup 测试01测试02测试03拆除 我需要在每次测试之前和之后运行特定的代码 以前 我可以从设置中调用该代码 但在测试之后 我不知道该怎么做 显然 从拆卸中调用代码对于最后一个测试是有效的 但
  • Python 包?

    好吧 我认为无论我做错了什么 它可能都是显而易见的 但我无法弄清楚 我已经阅读并重新阅读了有关包的教程部分 我唯一能想到的是这不起作用 因为我直接执行它 这是目录设置 eulerproject init py euler1 py euler
  • 当 TestCase 包含数组时,NUnit 无法识别该 TestCase

    这是我在 NUnit 中遇到的非常简单但烦人的行为 我有一些这样的测试 Test TestCase 1 2 hello TestCase 3 5 goodbye public void MyClass MyMethod int a int
  • 对需要发送标头的项目进行单元测试

    我目前正在与 PHPUnit 合作 尝试在我正在编写的内容的同时开发测试 但是 我目前正在编写会话管理器 并且在这样做时遇到了问题 Session 处理类的构造函数是 private function construct if header
  • 使用 Jest 和 Testbed 测试 Angular 9 服务

    在我的 Angular 9 项目中我添加了jest并删除Jasmine and Karma 我正在测试一项名为CorrectionService依赖于一个名为的服务RemoteService 我想监视RemoteService查看是否调用了

随机推荐

  • 无法加载文件或程序集或其依赖项之一。该系统找不到指定的文件

    我有这样的代码 public static Type ToType XmlSerializableType xmlSerializableType string func XmlSerialzationType ToType Type ty
  • 缩小以适应 Flexbox 或 Flex-basis 中的内容:内容解决方法?

    我有一个网络应用程序 我使用 Flexbox 进行布局 我试图既填充屏幕 它是一个应用程序 而不是文档 又尽可能不指定任何固定的宽度或高度 因为内容可能是各种各样的东西 完全流畅的布局 梦想 因此 我需要流体高度 全宽页眉和页脚 然后中间的
  • Golang将interface{}转换为struct

    我想改进下面代码中的 getCustomerFromDTO 方法 我需要从 interface 创建一个结构 目前我需要将该接口编组到 byte 然后将数组解组到我的结构 必须有更好的方法 我的用例是通过rabbitmq 发送结构 并使用这
  • 奇怪的 var_dump 行为

    我有以下代码行 var dump array 在一个文件中 它输出如下 array size 0 empty 在第二个文件中 它输出 string pre class xdebug var dump b array b i size 0 i
  • 使用 OpenCSV 从 csv 读取流数据

    我有加速度计和陀螺仪传感器流数据 保存在下载文件夹中 我想实时读取所有数据或逐行读取数据流 但我无法超出第一行 try CSVReader reader newCSVReader newFileReader path getAbsolute
  • 保护 Django 站点中的静态媒体访问

    我正在建立一个注册用户可以上传文件的网站 然后通过 Apache 提供这些文件 只有登录的用户才应该能够访问这些文件 我读过了这一页 http docs djangoproject com en dev howto apache auth
  • 如何通过字符和字数检测字符串中是否包含印地语 (devnagri)

    下面是一个示例字符串 string abcde abcde 我需要检查该字符串是否包含任何印地语 梵文 内容 如果包含 则检查字符和单词的数量 我猜带有 unicode 字符类的正则表达式可以工作http www regular expre
  • 使用 ggplot2 绘制发散堆积条形图

    有没有办法使用ggplot2创建发散的堆积条形图 如下图右侧所示 可重现示例的数据 library ggplot2 library scales library reshape dat lt read table text ONE TWO
  • 如何检查 MPMediaItem 是否仅包含音频的 MPMediaType?

    我希望我需要进行按位比较 但我不清楚 Objective C 语法是如何完成的 MPMediaType 的枚举定义如下 我需要做的是确保 MPMediaItem 根本不是视频 因为尽管我使用媒体查询过滤到 MPMediaTypeAnyAud
  • 使用 C# 在预先打印的纸张表单上的特定位置打印文本

    我需要在打印纸的特定位置打印纸张文本 原因是打印是在已打印的表单上完成的 其中包含名字和姓氏等字段 因此 当我得到这个人的名字时 它应该以纸质形式打印在分配的空间内 想知道是否有任何现有的库允许我使用 X 和 Y 坐标等坐标系在特定位置进行
  • Maven - 在 Eclipse 中抑制覆盖托管版本警告

    我在用spring boot 并且遇到了类似于所描述的错误here https stackoverflow com q 14730329 2860319 我将以下内容添加到我的 pom xml 中
  • 逆向工程iOS天气应用程序UI组件[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在尝试写下 iOS 天气应用程序的摘要 我感兴趣的主要组件在下图中标记为 1 2 3 4 和 5 UI 应获取如下 一个 ViewContr
  • 如果行中的特定单元格不为空,则格式化整行

    我想根据其中的特定单元格是否为空来格式化整行 我希望条件格式能够遍历所有行 并在该行中的 C 列不为空时添加背景颜色 我该如何解决 为了说明假设 整行 包含 A Z 列 请尝试格式 条件格式 自定义公式是 C1 lt gt 与您选择的格式和
  • 何时使用表达式混合创建用户控件

    因此 我正在开发一个新应用程序 并且我正在使用 Expression Blend 第一次 来创建布局和样式等 但我有一个关于何时要创建用户控件的问题 我有一个蛀虫 我想用它作为很多东西的背景 但它实际上是边框中的边框 然后我们将把任何控件放
  • 如何使用 Exchange Web 服务 (EWS) API 通过共享邮箱发送电子邮件

    我正在使用 MS Exchange Web 服务 API 通过共享邮箱发送电子邮件 发送电子邮件可以工作 但它们不会保存在已发送的项目中 如下所示 手动执行此操作 项目保存在已发送项目中 但通过我的代码不会保存它们 using Micros
  • 循环变量文件名[重复]

    这个问题在这里已经有答案了 我正在使用 Fortran 对分成许多文件的庞大数据集进行计算 文件的名称是 maltoLyo12per reimage set1 traj maltoLyo12per reimage set2 traj mal
  • 使用 angularjs 将多个对象发送到 webapi

    我的 ASP NET WebApi 应用程序中有以下控制器 Route api PutItem HttpPut public IHttpActionResult PutItem Guid id Item item if ModelState
  • 如何在TabControl.ContentTemplate中添加新的用户控件?

    我不太愿意在中添加用户控件的新实例TabControl ContentTemplate 我的 Xaml 在这里
  • 软件版本编号遵循什么规则? [复制]

    这个问题在这里已经有答案了 我一直在开发一些软件并想给它版本号 我该怎么做呢 为什么有些软件有两个版本 比如1 3v1 1 或者有些有 3 个数字 4 0 1 这一切背后的方法是什么 Thanks 我见过的常用方法是X Y Z 一般对应ma
  • 单元测试作为构建的一部分

    我有一个 CMake 项目 分为三个部分 我的库的编译 编译许多单元测试程序来测试这些库的每个精确子部分 使用这些库编译程序示例 My question is about the 2nd part My unit tests executa