Позвольте CMake настроить CTtest для печати верхнего и нижнего колонтитула вокруг результатов одного теста

Есть ли способ, в идеале от CMakeLists.txt, установить ctest относительно

  • распечатать заголовок перед запуском отдельных тестов,
  • напечатайте нижний колонтитул после выполнения отдельных тестов,
  • сделать нижний колонтитул зависимым от того, все ли тесты были успешными или нет?

Нижний колонтитул должен появиться ниже вывода по умолчанию

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

Это конкретизирует и обобщает несколько неясный вопрос, который открыт более 2 лет ( CMakeLists.txt: Как напечатать сообщение, если ctest не удается?). Поэтому я боюсь, что нет простого решения.

Отсюда альтернативный вопрос: может ли желаемое поведение достигаться при CDash?

2 ответа

Решение

ДА, у 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 теперь будет работать ctest с CTestScript, который вы сделали... слишком много работы?

Самый простой способ, который я могу придумать для вашего приложения, это просто добавить два пустых теста вверху и внизу в качестве заполнителей для верхних и нижних колонтитулов. У 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)

Может быть, кто-то может дать вам лучший ответ, но это самая простая (не совсем хорошая) реализация, о которой я могу подумать.

Другие вопросы по тегам