代码之家  ›  专栏  ›  技术社区  ›  Aviv Cohn

告诉Google测试在崩溃测试后继续执行其余测试

  •  0
  • Aviv Cohn  · 技术社区  · 4 年前

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

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

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

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

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

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

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

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

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

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