在测试

时间:2017-11-10 14:20:40

标签: c++ unit-testing googletest

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

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

并使用 - gtest_throw_on_failure 标志运行我的测试。

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

  1. 在到达断言时(如预期的那样)生成的可执行文件崩溃
  2. 弹出一个报告崩溃的窗口
  3. 在命令行中,我看到了测试结果,报告了失败的原因和原因
  4. 测试的执行不会继续(.exe崩溃)
  5. 那是什么,我还没有理解使用 ASSERT_ANY_THROW - gtest_throw_on_failure

    我也不想看到报告崩溃的窗口,因为测试应该定期自动运行。

    顺便说一句,我还尝试过的其他方法是使用 ASSERT_DEATH 而不是 ASSERT_ANY_THROW ,并且它会更好,因为所有测试都会执行。

    然而,.exe一直在崩溃,我需要按"关闭程序" 以便在崩溃后继续测试,这真的不好,因为我如上所述,这些测试自动运行,许多任务取决于测试结果。

1 个答案:

答案 0 :(得分:0)

  • ASSERT_ANY_THROW 用于测试是否从正在测试的代码中抛出异常。 Read this

  • 使用 - gtest_throw_on_failure 标志执行测试会使 Google Test断言失败 引发异常。这背后的想法是另一个测试框架将检测此异常并且未通过测试。完整信息here

总之, ASSERT_ANY_THROW 以及 - gtest_throw_on_failure 标志与彼此无关。

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