2011-07-04 175 views
2

在谷歌测试,我想能够做这样的事崩溃:测试与谷歌测试

void ImNotNiceToPointers(void* p) 
{ 
    ((int*)p) [5] = 1; 
} 

TEST(Bla, BlaBla) 
{ 
    EXPECT_NO_CRASH(ImNotNiceToPointers(NULL)); 
} 

而且我想输出显示错误的声明实际上使进程异常死亡。

在Google测试中是否对此有任何支持?我很确定我将如何自己实施它,所以我几乎可以肯定这是可能的。

回答

1

可以使用死亡测试隔离崩溃:

EXPECT_EXIT(ImNotNiceToPointers(p); exit(0), ExitedWithCode(0), ''); 

不过,我建议不要使用死亡测试。使用死亡测试会导致启动子进程的开销,无论是否发生崩溃。但是,如果您只是将代码保持原样并且测试崩溃,那么您将知道并且能够修复它。在Valgrind或Dr. Memory等工具的帮助下,追踪崩溃的起因很容易。

+0

看来,死亡测试是为了断言它死亡。 I.e如果没有,我会得到一个错误,我有种寻找其他方法。对于你的其他评论:这不是意外的崩溃,这是为了确保一个API可以接受各种古怪的输入与适当的错误处理,其中包括传递空指针等。捕捉崩溃作为控制错误允许连续执行的测试没有中断。 – sharkin

+0

在上面的代码中,死亡测试断言验证代码通常使用ExitedWithCode(0)谓词退出。如果ImNotNiceToPointers()调用正常执行,控制权将传递给exit()函数,这会强制子进程正常退出,从而满足测试条件。如果ImNotNiceToPointers调用崩溃,则不会满足ExitedWithCode(0)谓词,导致断言失败。 – VladLosev