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