【问题标题】:cmake ctest post test delete filecmake ctest 后测试删除文件
【发布时间】:2016-12-14 12:30:52
【问题描述】:

我有一个经过许多测试的 cmake 项目,即

add_test(test_title executable arg1 arg2)

在运行这些测试时会生成一些文件。 测试运行后,我想删除其中一个生成的文件,即

delete(${arg1}.txt)

    or

delete(${arg2}.pdf)

如果你能提供一个例子,将不胜感激。

【问题讨论】:

  • 您是否考虑过调整测试以写入临时文件?
  • 您好 Torbjörn,感谢您的回复。创建文件的不是 cmake 测试,而是可执行文件,我会假设 cmake 有某种可用的测试后清理方法。目前在运行测试时会创建大量数据,在每次测试后删除中间文件将是有益的。
  • 测试可执行文件本身应调整为在测试环境中运行时写入临时文件,即生成文件的被测函数的输出路径应该是可配置的。这与一般测试无关,而是库/程序的一般设计。

标签: cmake ctest


【解决方案1】:

作为advised in the letter,你可以用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()

【讨论】:

    【解决方案2】:

    我不确定在提出问题时此选项是否可用,但我使用了以下技巧:

    • 定义一个测试:test_title
    • 定义另一个测试:test_title_remove_file
      • depends 在 test_title 上(所以 test_title 将首先运行)
      • requires要删除的文件存在(显式优于隐式)
      • 致电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};
    )
    

    【讨论】:

      猜你喜欢
      • 2010-10-18
      • 1970-01-01
      • 2021-09-25
      • 2016-04-26
      • 2020-07-06
      • 2012-07-28
      • 2020-01-27
      相关资源
      最近更新 更多