问题标签 [ctest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
8073 浏览

command-line - 如何在运行时在 CTest 中传递命令行参数

我正在使用 CTest 并希望在运行时将命令行参数传递给底层测试。我知道有一些方法可以将命令行参数硬编码到 CMake/CTest 脚本中,但我想在运行时指定命令行参数,并让这些参数通过 CTest 传递给底层测试。

这甚至可能吗?

0 投票
1 回答
984 浏览

testing - 如何使用 CTest 检查两个文件之间的差异?

我正在尝试为一些遗留软件创建一些集成测试。当前进行测试的方法是使用已知输入运行代码并手动将输出与已知输出进行比较。

我想自动化这个过程,因为我已经在使用 CMake 我想用 CTest 来做这个。我有大约两打输入/输出需要检查。

这样做的正确方法是什么?我在 CMake 方面的经验不多,在 CTest 方面的经验更少。

0 投票
0 回答
124 浏览

c++ - 如何在 Jenkins 中显示来自多个构建的 C++ 测试的测量持续时间图

我有多个测试用例,它们实际上使用 Boost 计时器测量计算的持续时间。

测试用例是使用 Boost Test 定义的。

为了运行测试,我使用 CTest,因为我使用 CMake。测试都是用 add_test() 指定的。由于 CTest 生成 XML 文件,我可以在相应的 Jenkins 作业中显示单元测试结果。

对于性能测试,我不仅要显示测试用例是否成功,还要显示测量的持续时间。

是否可以在 C++(使用 Boost Test/CMake)中以某种方式标记测量的持续时间并将它们转换为包含两列测试用例对的文件?

然后,我想将此文件和 Jenkins 中以前构建的所有类似文件显示为图。用户应该能够跟踪过去多个作业的测量值,以查看性能是否有所提高。

因此 Jenkins 必须将数据转换为如下文件:

也许有一种我不知道的完全不同的方法。

0 投票
2 回答
1764 浏览

unit-testing - CMake:如何对您自己的 CMake 脚本宏/功能进行单元测试?

我已经围绕标准 CMake 命令编写了一些方便的包装器,并希望对此 CMake 脚本代码进行单元测试以确保其功能。

我已经取得了一些进展,但有两件事我希望得到帮助:

  1. 是否有一些“官方”方式对您自己的 CMake 脚本代码进行单元测试?类似于运行 CMake 的特殊模式?我的目标是“白盒测试”(尽可能)。
  2. 如何处理全局变量和变量范围问题?通过加载项目的缓存、配置测试 CMake 文件或通过 -D 命令行选项将其推送到测试中,将全局变量注入测试?变量范围的模拟/测试(缓存与非缓存、宏/函数/包含、引用传递的参数)?

首先,我查看了 /Tests 下,尤其是 Tests/CMakeTests 下的 CMake 源代码(我使用的是 CMake 版本 2.8.10)。有大量的品种可以找到,看起来其中很多都是专门针对单个测试用例的。

因此,我还研究了一些可用的 CMake 脚本库(如CMake++)以查看他们的解决方案,但那些 - 当他们有单元测试时 - 很大程度上取决于他们自己的库函数。

0 投票
1 回答
3904 浏览

cmake - CMake - How to create executable, but not add to "all" target?

Using CMake, I have a series of executables that are built, then added as tests, like this:

This works fine—the executables are created and the tests are correctly added. However, I don't want the test executables to be added to the all target.

Instead of having my tests built along with everything else, I would like them built right before the execution of the tests; maybe as part of make test or as part of ctest.

How can I do this?

0 投票
2 回答
6312 浏览

c++ - CMake 中的预期构建失败测试

有时最好检查某些东西是否无法构建,例如:

是否可以将这些类型的东西合并到 CMake/CTest 中?我正在寻找这样的东西CMakeLists.txt

(当然,据我所知,这些特定的 CMake 指令并不存在。)

0 投票
1 回答
14670 浏览

cmake - CTest 未检测到测试

我有一个有结构的项目

顶层目录CMakeLists.txt文件在哪里

并且tests/CMakeLists.txt

在我添加第二个测试之前一切正常mzl-communication-test。添加它和 after 中的行tests/CMakeLists.txt之后# Communications test,runningctest没有做任何额外的事情——它仍然只运行第一个测试。

删除构建目录并cmake再次运行后,初始 CMake 运行没有错误,但运行make再次运行 CMake,导致 CMake 出错:

后跟一个 Make 错误:

再次运行make会导致构建所有内容,包括测试;但是,运行ctest会导致

问题似乎与我正在使用 CMake 做的事情有关,但无法从这里弄清楚该怎么做,因为我看不到我正在做的任何事情与最初工作时不同。甚至我最后一次提交到 git 时,它在我提交时正在工作,现在也不再工作了。

0 投票
3 回答
3111 浏览

c++ - std::cerr 不等待 std::cout (运行 CTest 时)

上下文

我为用户编写了一个记录器打印消息。打印级别为“debug”、“info”或“warning”的std::cout消息,级别为“error”或“system_error”的消息打印在std::cerr. 我的程序不是多线程的。我在 Linux openSUSE 12.3 下使用 gcc 4.7.2 和 CMake 3.1.0 工作。

我的问题

我发现有时,当std::cerr一条长信息消息(以 打印std::coutLastTest.log之后出现错误消息(以 我不太了解这种行为,但我想为 启动一个写入线程std::cout,然后代码继续并启动另一个写入线程,std::cerr而无需等待第一个线程终止。

不使用 only 是否可以避免这种情况std::cout

我在终端没有问题。它仅在 CTest 将输出重定向到LastTest.log文件时发生。

请注意,我的缓冲区已刷新。std::endl来电后来不是问题std::cerr

例子

预期行为:

怎么了 :

我如何称呼我的记录器

这是我如何调用std::coutstd::cerr使用记录器的示例。我用这样的宏调用记录器:

这里,日志通道是专用于终端输出的对象,写入函数是:

你可以看到我的缓冲区在执行日志指令时被刷新了。

0 投票
0 回答
599 浏览

cmake - ctest --output-on-failure 不起作用

根据文档,该--output-on-failure参数将指示 ctest 在测试失败时显示测试输出。第二种方法是设置 env var CTEST_OUTPUT_ON_FAILURE。这两种选择都不适合我。

正如您在appveyor上看到的,一些测试失败,但没有给出输出。

在 GNU/Linux 上,设置CTEST_OUTPUT_ON_FAILURE确实对我有用。

0 投票
1 回答
18732 浏览

cmake - 如何在 cmake 中进行代码覆盖

我想在我的 cmake 项目中使用代码覆盖工具(lcov)。我在这里阅读了示例https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake 使用“add_test()”cmake 函数将测试添加到我的项目中。

我想创建一个自定义目标,称为“test_coverage”,在调用执行时应该运行所有测试,收集它们的覆盖率数据并在目录“code_coverage”中生成 html(使用 genhtml)。

有没有办法获得项目中所有测试的列表及其目录路径,以便在自定义目标“test_coverage”中单独执行每个测试并收集其覆盖率数据?