c++ - 有没有办法在运行特定测试后停止 GoogleTest,无论它通过还是失败?

标签 c++ unit-testing debugging googletest

我通过 GoogleTest 运行了大量单元测试。目前,其中一个(称为 fooTest)在运行完整测试套件时失败,但在单独运行时通过。因此,在 fooTest 之前运行的一个(或多个)测试正在做一些导致其失败的事情,这对于测试来说当然是一个很大的问题,我显然想找到罪魁祸首。

这是在默认运行条件下发生的,因此测试顺序始终相同。 fooTest 大约是此运行顺序的一半,并且有足够的测试,后半部分测试的运行时间很重要,尤其是多次运行时。

所以我想将 googletest 设置为在 fooTest 运行后始终停止测试运​​行 - 无论它通过还是失败。我知道我可以执行 --gtest_break_on_failure,但是如果我执行导致 fooTest 通过的测试运行,我仍然想停在那里,而不是执行其他所有操作。我可以运行调试并在测试后添加断点,但这也会减慢速度,感觉不太理想。

看起来这可能是一个简单的设置,但我还没有找到任何东西。我希望有一个我可以使用的运行参数,或者一个技巧来实现这一点。

最佳答案

您有多种选择:

  1. 只需调用 exit函数位于 fooTest 末尾。

  2. 创建 test fixture 。在 SetUp 中检查始终为 false 的标志,但如果执行 fooTest 则将其设置为 true。像这样的事情:

bool skip_testing = false;

// Class for test fixture
class MyTestFixture : public ::testing::Test {
 protected:
  void SetUp() override {
    if (skip_testing) {
      GTEST_SKIP();
    }
  }
};

TEST_F(MyTestFixture, test1) {
  //
  EXPECT_EQ(1, 1);
}

TEST_F(MyTestFixture, footest) {
  EXPECT_EQ(1, 1);
  skip_testing = true;
}

TEST_F(MyTestFixture, test2) {
  //
  EXPECT_EQ(1, 1);
}

TEST_F(MyTestFixture, test3) {
  //
  EXPECT_EQ(1, 1);
}


请参阅此处的工作示例:https://godbolt.org/z/8dzKGE6Eh

  • 与选项 2 类似,但使用 explicit success and failureSetUp 中而不是 GTEST_SKIP 中。不过,首选使用 GTEST_SKIP,因为您的输出将显示测试已被跳过。
  • 关于c++ - 有没有办法在运行特定测试后停止 GoogleTest,无论它通过还是失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72061504/

    相关文章:

    c++ - Spirit X3,这种错误处理方式有用吗?

    c++ - atomic_flag 在 C++ 上的使用

    unit-testing - 集成测试和行为测试 BDD 之间的主要区别是什么

    ruby-on-rails - ruby rails : Running Tests

    C++ - 将 glfwGetTime() 用于固定时间步长

    c++ - Regex\w 在 C++11 中转义

    unit-testing - 在 play 2.0 scala 中在同一个 FakeApplication() 中运行多个测试

    c# - 为什么 RuntimeMethodInfo.Invoke 没有出现在我的 Visual Studio 调试器调用堆栈中?

    windows - 崩溃显示Visual Studio选项。但不显示不发送消息

    sql - 如何找到未封闭的连接?超时时间已到。在操作完成之前超时时间已过或服务器没有响应