【问题标题】:test for non-zero exit status using ctest/cmake使用 ctest/cmake 测试非零退出状态
【发布时间】:2018-07-11 15:38:53
【问题描述】:

感兴趣的应用程序是一个编译器,当它在源代码中遇到错误时,它会返回一个非零退出代码。编译器的单元测试由故意触发错误的小型 sn-ps 组成。

用于添加测试的函数是:

function(add_compiler_test test_name options)
  add_test(NAME ${test_name}
    COMMAND $<TARGET_FILE:pawncc> ${DEFAULT_COMPILER_OPTIONS} ${options})
  set_tests_properties(${test_name} PROPERTIES
    ENVIRONMENT PATH=$<TARGET_FILE_DIR:pawnc>)
endfunction()

当程序返回非零退出代码时,这会导致测试失败,尽管这是正确的行为。

如何测试程序的退出状态?

【问题讨论】:

    标签: unit-testing cmake ctest


    【解决方案1】:

    如果您希望测试在返回非零退出状态时报告为 SUCCESS,否则为 FAILED,请为测试设置 WILL_FAIL 属性:

    set_tests_properties(<test1> <test2> ... PROPERTIES WILL_FAIL TRUE)
    

    【讨论】:

    • 如何区分程序崩溃和程序故意返回非零退出代码?我需要检查退出状态。
    • 在任何情况下崩溃都会被报告为 FAILED。另请参阅that question 和我的回答。
    • 正则表达式测试(使用PASS_REGULAR_EXPRESSION)成功了,尽管由于将WILL_FAIL 设置为TRUE 而实际上失败了。我该如何解决这个问题?我需要强制进行输出检查,但允许使用非零退出代码。
    • 这里也一样。寻找一种方法来检查特定的非零返回值和特定的输出。 @Yashas,您找到解决方案了吗?我也在测试一个编译器:D
    • @sebkraemer:对于可执行结果的复杂解释(在您的情况下是编译器结果),您可以围绕调用该可执行文件创建一个 wrapper。请参阅my answer 了解相关问题。
    猜你喜欢
    • 2020-12-23
    • 2019-08-06
    • 1970-01-01
    • 2015-04-30
    • 2022-06-21
    • 2019-10-08
    • 2017-05-18
    • 2013-12-23
    • 1970-01-01
    相关资源
    最近更新 更多