Я создаю некоторые тесты с помощью CTest. Обычно, я могу настроить тест просто строкой:
ADD_TEST(Test_Name executable args)
Однако я столкнулся с проблемой, у меня есть некоторые тесты, которые требуют, чтобы две команды были выполнены для нее для работы, есть ли какой-либо способ, которым я могу запустить две программы в единственном ctest или обязан, я создаю новый тест для каждого?
Спасибо.
Команда 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