C++ 什么是谷歌测试,死亡测试

C++ 什么是谷歌测试,死亡测试,c++,testing,googletest,C++,Testing,Googletest,我看到了该功能的文档,因为它位于Google测试概述功能中,详细内容见: 它们看起来像标准的assert(),但它们是Google测试的一部分,所以是xUnit测试框架。因此,我想知道使用这些死亡测试的真正用途或优势是什么。断言是为了确认如果在当前进程中执行某个函数,它将导致程序终止(详细信息说明死亡测试是从子进程调用的,该子进程允许测试在死亡的情况下继续进行)。这很有用,因为某些代码可能会保证程序在失败时终止/中止(例如,如果出现不可恢复的错误),而单元测试应确认函数遵守其记录的行为,而不管

我看到了该功能的文档,因为它位于Google测试概述功能中,详细内容见:


它们看起来像标准的
assert()
,但它们是Google测试的一部分,所以是xUnit测试框架。因此,我想知道使用这些死亡测试的真正用途或优势是什么。

断言是为了确认如果在当前进程中执行某个函数,它将导致程序终止(详细信息说明死亡测试是从子进程调用的,该子进程允许测试在死亡的情况下继续进行)。这很有用,因为某些代码可能会保证程序在失败时终止/中止(例如,如果出现不可恢复的错误),而单元测试应确认函数遵守其记录的行为,而不管可能是什么

wiki页面上的描述最能说明这一点:

在许多应用程序中,如果不满足某个条件,断言可能会导致应用程序失败。这些健全性检查确保程序处于已知的良好状态,在某些程序状态损坏后,会在最早的时间内失败。如果断言检查错误的条件,则程序可能继续运行一种错误状态,可能导致内存损坏、安全漏洞或更糟的情况。因此,测试此类断言语句是否按预期工作至关重要


我认为你链接中的介绍很好地解释了这一点:

在许多应用程序中,如果不满足某个条件,断言可能会导致应用程序失败。这些健全性检查确保程序处于已知的良好状态,在某些程序状态损坏后,会在最早的时间内失败。如果断言检查错误的条件,则程序可能继续运行一种错误状态,可能导致内存损坏、安全漏洞或更糟的情况。因此,测试此类断言语句是否按预期工作至关重要

由于这些先决条件检查会导致进程死亡,我们称之为死亡测试。更一般地说,任何检查程序是否以预期方式终止的测试也是死亡测试。


哪一点没有意义?

我可能错过了这一部分。所以传统的
ASSERT()
是一个死亡测试。@Wernight:不,ASSERT\u death是一个死亡测试。传统的
ASSERT
是一个程序行为,您可能想为它编写一个死亡测试,以证明发生
ASSERT
的过程按预期死亡。@Wernight是一个死亡测试,也是测试segfault是否发生?困扰我的部分是ga在
ASSERT()或
ASSERT()上使用谷歌死亡测试
@Wernight:如果使用
assert
失败,则进程停止,因此单元测试停止,没有生成报告等。通过在另一个进程中启动测试,可以监视它是否按预期停止,如果没有停止则报告,等等。@Matthieu:因此在应用程序中替换传统的
assert()
由Google Test的
ASSERT\u EXIT()
发布的版本将同样工作,但在测试执行期间可以正确检查断言。@Wernight:不,
ASSERT\u EXIT
是一种Google测试。您可以在测试代码中使用它。它的意思是“测试指定的代码是否退出”,就像
ASSERT\u THROW
的意思一样,“测试指定代码抛出的值”。让代码处于测试状态。@Steve:D'OH!明白了。死亡测试是将测试断言放入单元测试代码中的测试断言,就像
ASSERT\u EQ
,在给定一些输入的情况下,检查程序是否存在或以某种方式崩溃。因此在程序代码中,我们仍然使用
ASSERT()
或其他传统方法关闭/崩溃应用程序。