使用ctest/cmake测试非零退出状态

5

这个应用程序是一个编译器,当它在源代码中遇到错误时会返回一个非零的退出码。编译器的单元测试由一些小片段组成,这些片段有意触发错误。

添加测试的函数是:

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()

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

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

1个回答

6

如果你希望测试在返回非零退出状态时报告为成功,否则报告为失败,请为测试设置WILL_FAIL属性:

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

我如何区分程序崩溃和故意返回非零退出代码?我需要检查退出状态。 - Yashas
1
无论如何,崩溃都将报告为失败。另请参见该问题以及我的答案。 - Tsyvarev
1
正则表达式测试(使用PASS_REGULAR_EXPRESSION)尽管由于将WILL_FAIL设置为TRUE而实际上失败,但仍然成功。我该如何解决这个问题?我需要强制进行输出检查,但允许非零退出代码。 - Yashas
我也是。正在寻找一种检查特定非零返回值和特定输出的方法。@Yashas,你找到解决方案了吗?顺便说一下,我也在测试编译器:D - sebkraemer
@sebkraemer:对于可执行结果(在您的情况下,编译器结果)的复杂解释,您可以创建一个包装器来调用该可执行文件。请参见我在相关问题中的答案 - Tsyvarev
@Tsyvarev,我发现我需要进行一次间接操作,使用脚本或类似的东西。为了获得完全的灵活性(返回代码和输出),我已经考虑引入一个测试框架,并将断言作为单元测试来执行。我可能以后还需要一个。仍然感谢你提供这个简洁的程序,我会记在心里的。 - sebkraemer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接