Тестирование наших модулей CMake

Мы создали несколько дополнительных функций для CMake. Их стало довольно много, и нам нужно (юнит) их протестировать.

Есть простые, которые являются только переменными базами, такими как:

function(join_list LIST GLUE)

Их можно протестировать с помощью специального сценария CMake, который проверяет результаты. Для этого мы также написали набор макросов assert.

Это становится намного сложнее, когда функции нацелены на:

function(target_my_custom_property_set TARGET VALUE)

Нам нужно несколько файлов CMakeLists.txt, которые необходимо настроить. Конфигурация должна быть успешной или неудачной с указанными сообщениями. Также файлы результатов должны быть проверены.

Интересно, есть ли более простой способ? Есть ли существующая структура? Как Kitware проверяет поставленные модули?

2 ответа

ctest является основой для запуска всевозможных тестов. Есть много тестов для cmake которые запускаются как часть процесса тестирования CMake. Эти тесты являются частью исходного кода в папке " Тесты " и являются частью CMakeLists.txt,

Конкретные тесты, которые вы хотите посмотреть, находятся в RunCMake папка. Эти тесты используют RunCMake.cmake, Хорошим примером являются тесты в message, Что эти тесты делают, это используют execute_process чтобы захватить вывод из cmake и сравнить вывод из cmake настройте шаг для содержимого файла с ожидаемым выводом. Возвращаемое значение из cmake также возвращается и может быть проверен.

Вы не указываете, что такое "файлы результатов". Существуют примеры, которые являются более сложными, чем выполнение конфигурации, сборка и сканирование некоторых файлов для проверки их содержимого.

Это может быть проще, если вы отделите проверку сообщений в неудачной конфигурации от неудачной сборки против проходящей конфигурации и сборки и конкретного выходного сообщения.

Прошло более 4 лет, а я до сих пор борюсь с этим. Однако одно из решений, которое мы используем, — это имитировать целевые функции:

      function(set_target_properties)
   assert(${CMAKE_ARGC} == 8)
   # more asserts....
endfunction()

target_my_custom_property_set(tar val)

Зачастую этого бывает достаточно для проверки этих функций.

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