让CMake设置CTtest以在单个测试的输出周围打印页眉和页脚

时间:2016-06-07 10:39:33

标签: cmake ctest

有没有办法,最好从CMakeLists.txtctest设置

  • 在运行单个测试之前打印标题,
  • 在运行单个测试后打印页脚
  • 使页脚取决于测试是否全部成功?

页脚应显示在默认输出

下方
The following tests FAILED:
       76 - MyHardTest
Errors while running CTest

这具体化并概括了一个有点不明确的问题,该问题自2年多以来一直开放(CMakeLists.txt: How to print a message if ctest fails?)。因此,我担心没有简单的解决方案。

那么另一个问题是:CDash可以实现理想的行为吗?

2 个答案:

答案 0 :(得分:1)

是的,CTest确实有宏来实现这个[1]:

  • CTEST_CUSTOM_PRE_TEST在测试阶段
  • 期间运行任何测试之前执行的命令
  • CTEST_CUSTOM_POST_TEST在测试阶段
  • 期间运行任何测试后执行的命令

要从cmake激活这些宏以供ctest使用,必须以某种方式将它们放入 build 目录中。看来,有两个步骤是必要的:

(1)在源代码树的某处有一个脚本scriptdir/CTestCustom.cmake.in,其中包含

set(CTEST_CUSTOM_POST_TEST "echo AFTER_THE_TEST")

或其他任何命令而不是“echo”

(2)让CMakeLists.txt致电

configure_file("scriptdir/CTestCustom.cmake.in" ${CMAKE_BINARY_DIR}/CTestCustom.cmake)

以便在配置阶段将CTest配置文件放在 build 目录中的首选名称[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/

答案 1 :(得分:0)

在我的研究过程中,我发现整合这样的东西非常困难。我不完全确定,但我相信您可以在CTestScript中执行此操作,然后创建add_custom_target以始终允许该脚本使用ctest执行。例如,命令make check现在将使用您创建的CTestScript运行ctest ...太多工作了吗?

我能想到的应用程序的最简单方法是在顶部和底部添加两个空测试作为页眉和页脚的占位符。 Ctest已经有了“以下测试FAILED:”最终的输出类型,所以你可能不必担心它。任何类型的条件逻辑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)

也许有人可以给你一个更好的答案,但这是我能想到的最简单(不是很好)的实现。