有没有办法,理想情况下从CMakeLists.txt
,设置ctest
- 在运行单个测试之前打印标题,
- 运行单个测试后打印页脚,
- 使页脚取决于测试是否全部成功?
页脚应显示在默认输出下方
The following tests FAILED:
76 - MyHardTest
Errors while running CTest
这具体化并概括了一个有点不清楚的问题,这个问题已经开放了 2 年多(CMakeLists.txt:如果 ctest 失败,如何打印消息?因此,我担心没有简单的解决办法。
因此,还有一个替代问题:CDash
能实现期望的bevhavior吗?
是的,CTest 确实有宏来实现这一点 [1]:
-
CTEST_CUSTOM_PRE_TEST
在测试阶段运行任何测试之前执行的命令 -
CTEST_CUSTOM_POST_TEST
在测试阶段运行任何测试后执行的命令
要从cmake
激活这些宏以供ctest
使用,必须以某种方式将它们放入构建目录中。因此,似乎需要两个步骤:
(1)在源代码树中的某个地方scriptdir/CTestCustom.cmake.in
一个脚本,其中包含
set(CTEST_CUSTOM_POST_TEST "echo AFTER_THE_TEST")
或任何命令而不是"回声"
(2)让CMakeLists.txt
打电话
configure_file("scriptdir/CTestCustom.cmake.in" ${CMAKE_BINARY_DIR}/CTestCustom.cmake)
以便在配置阶段将 CTest 配置文件放置在构建目录中的首选名称 [2] CTestCustom.cmake
下。
[1] https://cmake.org/Wiki/CMake/Testing_With_CTest[2] https://blog.kitware.com/ctest-performance-tip-use-ctestcustom-cmake-not-ctest/
在我的研究过程中,我发现整合这样的东西非常困难。我不完全确定,但我相信您可以在 CTestScript 中执行此操作,然后创建一个add_custom_target
以始终允许该脚本以ctest
执行。例如,命令make check
现在将使用您创建的 CTestScript ctest
运行...工作量太大?
我能为您的应用程序想到的最简单方法是在顶部和底部添加两个空测试作为页眉和页脚的占位符。Ctest 在最后已经有一个"以下测试失败:"类型的输出,所以你可能不必担心它。任何类型的条件逻辑IF TEST FAILED DO THIS
,你目前不能在ctest中做。
add_test(NAME HEADER_GOES_HERE)
add_test(NAME ACTUAL_TEST COMMAND test)
add_test(NAME FOOTER_GOES_HERE)
也许有人可以给你一个更好的答案,但这是我能想到的最简单(一点也不好)的实现。