告诉谷歌测试在测试崩溃后继续执行其余的测试



我有一个使用GoogleTest用C++编写的大型单元测试套件。

我最近对代码库进行了更改,这可能会影响系统的不同部分,因此各种测试现在可能会失败甚至崩溃。我想运行一次整个套件(不幸的是,这需要很长时间才能完成(,总结失败测试的列表,并逐一修复它们。

然而,当测试崩溃时(例如,出现分段故障(,而不是简单地逻辑失败时,GTest似乎停止并不再执行测试。

我可以修复崩溃的测试,但是重新运行整个套件需要很长时间。

有没有一种方法可以告诉GTest在测试崩溃后恢复执行其余的测试?

或者,至少是一种从特定测试开始启动GTest的方法(假设测试的顺序总是相同的(?

  1. 如果您需要测试当API使用不正确时是否触发断言,那么gtest将提供一种称为死亡测试的东西
  2. 如果你的测试因为分段故障而崩溃,你应该尽快修复!您可以通过添加DISABLED_前缀或在测试男孩中添加GTEST_SKIP()来禁用临时测试。或者,还有命令行参数--gtest_filter=<colon separated positive patterns>[:-<colon separated negative patterns>]。无法从分段故障中恢复,因此测试套件无法继续
  3. 如果您使用gcc或clang(msvc通过实验具有此功能(,则可以启用地址清理程序来快速检测测试代码中的所有内存问题。您将能够更快地解决这些问题
  4. IDE中有一些很酷的插件可以处理gtest,这些插件可以帮助您跟踪运行了哪些测试,哪些失败了,哪些崩溃了

谷歌测试无法满足您的需求。我建议你写一个简单的测试运行程序:

  1. 使用--gtest_list_tests运行测试可执行文件以获取所有测试的列表
  2. 在所有测试中运行一个循环,打印出测试编号,并使用--gtest_filter=FooTest运行测试可执行文件。Bar在每个循环迭代中只调用一个测试
  3. 循环跳过所需的迭代次数,并在编号为N的测试固定后从编号为N开始运行

你只需要写一次这样的runner脚本,这应该不难。

最新更新