在测试中使用 --gtest_throw_on_failure 和 ASSERT_ANY_THROW

Usage of --gtest_throw_on_failure together with ASSERT_ANY_THROW in test

在执行单元测试期间,我希望我的程序断言失败然后崩溃。

我的计划是测试程序是否在我为测试准备的某些条件下有效崩溃。为此,我想在测试中使用 ASSERT_ANY_THROW(statement_causing_crash);.

和 运行 我用标志 --gtest_throw_on_failure.

进行的测试

从命令行 运行ning 时的结果是:

  1. 到达断言时生成的可执行文件崩溃(如预期)
  2. 弹出 window 报告崩溃
  3. 在我看到测试结果的命令行中,报告了失败的行和原因
  4. 测试的执行没有继续(.exe 崩溃)

那是什么,我还不明白 ASSERT_ANY_THROW--gtest_throw_on_failure 的用法?

我也不希望看到 window 报告崩溃,因为测试应该 运行 定期自动进行。

顺便说一下,我还尝试了其他方法,就是使用 ASSERT_DEATH 而不是 ASSERT_ANY_THROW,而且效果更好,因为所有测试都已执行。

然而,.exe 一直崩溃,我需要按 "Close the program" 以便在崩溃后继续测试,这真的不好,因为我上面提到,这些测试 运行 是自动进行的,许多任务取决于测试的结果。

  • ASSERT_ANY_THROW用于测试被测代码是否抛出异常。 Read this.

  • 使用标志 --gtest_throw_on_failure 执行测试会导致 Google 测试断言失败 抛出异常。这背后的想法是另一个测试框架将检测到这个异常并使测试失败。完整信息 here

综上所述,ASSERT_ANY_THROW和标志--gtest_throw_on_failure没有任何关系其他.

顺便说一下,使用 GCC 我找不到避免弹出窗口 windows 的方法并使用 ASSERT_DEATH。我对我的问题的解决方案是伪造断言,并在我的测试中使用它。我的 assert 的伪造抛出异常,由 ASSERT_ANY_THROW 检测到。