CTest с несколькими командами

Я создаю некоторые тесты с помощью CTest. Обычно, я могу настроить тест просто строкой:

ADD_TEST(Test_Name executable args)

Однако я столкнулся с проблемой, у меня есть некоторые тесты, которые требуют, чтобы две команды были выполнены для нее для работы, есть ли какой-либо способ, которым я могу запустить две программы в единственном ctest или обязан, я создаю новый тест для каждого?

Спасибо.

13
задан Leif Andersen 17 June 2010 в 20:06
поделиться

1 ответ

Команда add_test принимает только один исполняемый файл, но вы можете запустить любой исполняемый файл, который на самом деле является сценарием. Чтобы сделать это кроссплатформенным способом, напишите сценарий в самом CMake. В CMake есть опция -P для запуска произвольных фрагментов языка сценариев CMake при выполнении make или make test, а не во время генерации Makefile.

К сожалению, вы не можете передавать аргументы такому сценарию. Но вы можете установить переменные в значения, что не менее хорошо.

Этот сценарий вы можете назвать runtests.cmake, он выполняет команды CMD1 и CMD2 и проверяет каждую на ненулевой код возврата, возвращаясь из самого CMake с ошибкой, если это происходит:

macro(EXEC_CHECK CMD)
    execute_process(COMMAND ${CMD} RESULT_VARIABLE CMD_RESULT)
    if(CMD_RESULT)
        message(FATAL_ERROR "Error running ${CMD}")
    endif()
endmacro()
exec_check(${CMD1})
exec_check(${CMD2})

... и затем добавляет ваши тестовые случаи так:

add_executable(test1 test1.c)
add_executable(test2 test2.c)
add_test(NAME test
    COMMAND ${CMAKE_COMMAND}
            -DCMD1=$<TARGET_FILE:test1>
            -DCMD2=$<TARGET_FILE:test2>
    -P ${CMAKE_CURRENT_SOURCE_DIR}/runtests.cmake)

$ расширяется до полного пути к исполняемому файлу во время генерации билд-файла. Когда вы запустите make test или эквивалент, будет запущен скрипт "cmake -P runtests.cmake", устанавливающий переменные CMD1 и CMD2 в соответствующие тестовые программы. После этого скрипт последовательно выполнит две ваши программы. Если одна из тестовых программ не выполнится, то весь тест завершится неудачно. Если вам нужно увидеть результат теста, вы можете выполнить make test ARGS=-V

19
ответ дан 1 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: