【问题标题】:C++ testing suite that survives asserts in code在代码中存在断言的 C++ 测试套件
【发布时间】:2017-02-05 05:17:17
【问题描述】:

我正在尝试为我的项目设置测试,我已禁用异常并已将我的断言定义为调用 std::abort。 gtest 和 Catch 都只能在一个调用 std::abort 的测试中失败,因为它会杀死整个测试套件。
我的项目编译成测试项目/可执行文件引用的 DLL。除了:

  1. 启用异常并抛出我的断言
  2. 创建自定义编译目标并执行与 1 类似的操作。
  3. 重构代码不依赖断言失败

我还有其他选择吗?出于设计/速度方面的考虑,我不希望启用异常。

【问题讨论】:

  • googletest 支持这一点。查找死亡测试。
  • 应用程序中止的死亡测试测试。我构建代码的方式会在出现不可恢复的错误时中止,这几乎可以随时发生。
  • 这可能不是一个很好的设计。

标签: c++ unit-testing testing visual-c++ automated-tests


【解决方案1】:

这里真的有两个问题:

1. Can I do testing without exceptions?

是的,你可以。如果std::abort 没有为您提供足够的信息,您可以尝试使用std::quick_exit 返回错误代码

2. Can I keep the test suite going after a failure?

这真的与前者无关。在出现错误后保持测试套件运行是一项技术挑战,因为程序可能会因为可怕的不可恢复的原因(例如除以零或堆栈可能已被破坏)而使测试失败。

继续运行测试套件的唯一方法是在单独的进程中运行测试。

在我的一个项目中,我在main 中削减了开关标志,这导致程序在测试模式下运行,然后指向特定的测试。然后,一个 bash 脚本会迭代大约 100 个这样的测试。

【讨论】:

    猜你喜欢
    • 2017-01-13
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    相关资源
    最近更新 更多