CTest с несколькими командами - PullRequest
12 голосов
/ 18 июня 2010

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

ADD_TEST(Test_Name executable args)

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

Спасибо.

1 Ответ

18 голосов
/ 18 июня 2010

Команда 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)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...