Tom*_*don 4 automated-tests cmake clang address-sanitizer
我有一些测试来测试 clang 的地址清理器捕获特定错误。(我想确保我对它可以捕获的错误类型的理解是正确的,并且未来的版本会继续捕获我期望它们捕获的错误类型。)这意味着我有几个测试失败了OTHER_FAULT,这似乎是 clang 运行时报告错误的固定方式。
我已经为这些测试设置了WILL_FAIL标志TRUE,但这似乎只是检查成功、无异常失败的返回值。如果进程因异常终止,cmake 仍将其归类为失败。
我还尝试使用PASS_REGULAR_EXPRESSION来观察发生此错误时打印出的区分消息,但同样,如果测试以异常终止,cmake 似乎将测试归类为失败。
我能做些什么来解决这个问题吗?
(特定于 clang 的答案也是一种选择!-但我怀疑这将是我最后一次需要测试这样的东西,所以如果可能的话,我更愿意知道如何使用 cmake 进行测试)
CTest 只为测试程序的结果提供基本的、常用的解释器。为了实现其他解释器,您可以编写简单的程序/脚本,它包装测试并根据需要解释其结果。例如 C 程序(适用于 Linux):
test_that_crash.c :
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
int main(int argc, char** argv)
{
pid_t pid = fork();
if(pid == -1)
{
// fork fails
return 1;
}
else if(pid)
{
// Parent - wait child and interpret its result
int status = 0;
wait(&status);
if(WIFSIGNALED(status)) return 0; // Signal-terminated means success
else return 1;
}
else
{
// Child - execute wrapped command
execvp(argv[1], argv + 1);
exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)
这个程序可以在 CMake 中使用,如下所示:
CMakeLists.txt:
# Compile our wrapper
add_executable(test_that_crash test_that_crash.c)
# Similar to add_test(name command), but test is assumed successfull only if it is crashed(signalled)
macro(add_test_crashed name command)
# Use generic flow of add_test() command for automatically recognize our executable target
add_test(NAME ${name} COMMAND test_that_crash ${command} ${ARGN})
endmacro(add_test_crashed)
# ...
# Add some test, which should crash
add_test_crashed(clang.crash.1 <clang-executable> <clang-args>)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1522 次 |
| 最近记录: |