我有一个使用GoogleTest用C++编写的大型单元测试套件。
我最近对代码库进行了更改,这可能会影响系统的不同部分,因此各种测试现在可能会失败甚至崩溃。我想运行一次整个套件(不幸的是,这需要很长时间才能完成(,总结失败测试的列表,并逐一修复它们。
然而,当测试崩溃时(例如,出现分段故障(,而不是简单地逻辑失败时,GTest似乎停止并不再执行测试。
我可以修复崩溃的测试,但是重新运行整个套件需要很长时间。
有没有一种方法可以告诉GTest在测试崩溃后恢复执行其余的测试?
或者,至少是一种从特定测试开始启动GTest的方法(假设测试的顺序总是相同的(?
- 如果您需要测试当API使用不正确时是否触发断言,那么gtest将提供一种称为死亡测试的东西
- 如果你的测试因为分段故障而崩溃,你应该尽快修复!您可以通过添加
DISABLED_
前缀或在测试男孩中添加GTEST_SKIP()
来禁用临时测试。或者,还有命令行参数--gtest_filter=<colon separated positive patterns>[:-<colon separated negative patterns>]
。无法从分段故障中恢复,因此测试套件无法继续 - 如果您使用gcc或clang(msvc通过实验具有此功能(,则可以启用地址清理程序来快速检测测试代码中的所有内存问题。您将能够更快地解决这些问题
- IDE中有一些很酷的插件可以处理gtest,这些插件可以帮助您跟踪运行了哪些测试,哪些失败了,哪些崩溃了
谷歌测试无法满足您的需求。我建议你写一个简单的测试运行程序:
- 使用--gtest_list_tests运行测试可执行文件以获取所有测试的列表
- 在所有测试中运行一个循环,打印出测试编号,并使用--gtest_filter=FooTest运行测试可执行文件。Bar在每个循环迭代中只调用一个测试
- 循环跳过所需的迭代次数,并在编号为N的测试固定后从编号为N开始运行
你只需要写一次这样的runner脚本,这应该不难。