cmake ctest post test удалить файл

У меня есть проект cmake, который проходит ряд тестов, т.е.

add_test(test_title executable arg1 arg2)

При запуске этих тестов создается ряд файлов. После запуска теста я хотел бы удалить один из этих созданных файлов, т.е.

delete(${arg1}.txt)

    or

delete(${arg2}.pdf)

Если бы вы могли привести пример, мы были бы очень признательны.


person David Walker    schedule 14.12.2016    source источник
comment
Думали ли вы о корректировке ваших тестов для записи во временные файлы?   -  person Torbjörn    schedule 15.12.2016
comment
Привет, Торбьорн, Спасибо за ответ. Это не тесты cmake, которые создают файлы, а исполняемый файл, я бы предположил, что у cmake есть какие-то доступные методы очистки после тестирования. В настоящее время при запуске тестов создается большой объем данных, поэтому было бы полезно удалять промежуточные файлы после каждого теста.   -  person David Walker    schedule 19.12.2016
comment
Сами тестовые исполняемые файлы должны быть настроены для записи во временные файлы при запуске в тестовой среде, то есть путь вывода для тестируемых функций, создающих файлы, должен быть настраиваемым. Это не имеет отношения к тестированию в целом, а имеет отношение к общему дизайну библиотеки / программы.   -  person Torbjörn    schedule 19.12.2016


Ответы (2)


Как рекомендовано в письме, фактическую команду тестирования можно обернуть с помощью скрипта cmake. В вашем случае это может быть:

add_test(NAME test_title
  COMMAND ${CMAKE_COMMAND}
    -Darg1=${arg1}
    -Darg2=${arg2}
    -P ${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake
)

А оболочка runtest.cmake может быть:

execute_process(COMMAND executable ${arg1} ${arg2}
  TIMEOUT 1000 # it should be less than in add_test
  RESULT_VARIABLE status
)
file(REMOVE ${arg1}.txt)
file(REMOVE ${arg2}.txt)
if(status)
  MESSAGE(FATAL_ERROR "Test executing status: ${status}")
endif()
person sercxjo    schedule 15.06.2018

Я не уверен, была ли эта опция доступна в момент, когда я задавал вопрос, но я использовал хакерство в следующих строках:

  • определить тест: test_title
  • define another test: test_title_remove_file
    • depends on test_title (so test_title will be run first)
    • требует нужных файлов удалить, чтобы существовать (явное лучше, чем неявное)
    • вызывает cmake -E remove <file> doc

Таким образом, у вас будет один ложный дополнительный тест, но, по крайней мере, он скажет вам, есть ли какие-либо ошибки.

Моя реализация:

add_test(NAME test_title_remove_file
    COMMAND ${CMAKE_COMMAND} -E remove
        ${arg1}
        ${CMAKE_CURRENT_BINARY_DIR}/${arg2}
)

set_tests_properties(test_title_remove_xmls PROPERTIES
    DEPENDS test_title ## note it is your test_title
    REQUIRED_FILES 
    ${arg1};
    ${CMAKE_CURRENT_BINARY_DIR}/${arg2};
)
person bigla    schedule 27.09.2019