2017-02-05 36 views
1

我想为我的项目设置测试,我禁用了例外,并定义了我的断言来调用std :: abort。 gtest和Catch都只能在一次调用std :: abort的测试中失败,因为它会杀死整个测试套件。
我的项目编译成测试项目/可执行文件引用的DLL。除了:C++测试套件在代码中生存断言

  1. 使异常和有我断言抛出
  2. 创建自定义编译目标,并做以1
  3. 重组代码类似的东西不依靠断言失败

我有其他选择吗?由于设计/速度问题,我不希望启用异常。

+0

googletest支持此操作。查找死亡测试。 –

+0

应用程序中止的死亡测试测试。我构建代码的方式会在任何时候发生不可恢复的错误,这种错误几乎可以在任何时候发生。 – Vitali

+0

这可能是一个不太好的设计。 –

回答

0

有真的在这里两个问题:

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次这样的测试。