gtest:最终会EXPECT_

gtest: EXPECT_ eventually

提问人:gruszczy 提问时间:10/24/2023 更新时间:10/24/2023 访问量:29

问:

我正在测试本质上是异步产生结果的代码。我没有能力注入细粒度的仪器来控制流量。我想在运行断言之前等待结果。

现在我需要这样做:

for (int i = 0; i < 10; i++) {
  if (!check_if_satisfied()) {
    sleep(1);
  }
}

EXPECT_TRUE(check_if_satisfied());

我想以某种方式有一个辅助方法:

eventually(10 /* seconds */, [&]() {
  EXPECT_TRUE(check_if_satisfied());
});

我尝试实现并有一个侦听器来拦截异常

  testing::TestEventListeners& listeners =
      testing::UnitTest::GetInstance()->listeners();
  auto printer = listeners.Release(listeners.default_result_printer());
  auto catchListener = new CatchingListener();
  listeners.Append(catchingListener);
  bool success = false
  while (true) {
    try {
      count++;
      fn();
      if (!Test::HasFailure()) {
        success = true;
      }
    } catch (...) {
    }
    if (success) {
      return;
    }
    sleep(1);
    if (count > 10) {
      break;
    }
  }
  listeners.Remove(catchingListener);
  fn()
...

但问题是 HasFailure 仍然存在,我没有看到公共的 Clear 方法(另外 - 如果已经有其他故障,我不想清除它)。

(我知道上面的代码不是内存安全的,它只是一个演示)

我有什么方法可以解决这个问题吗?

C++ GoogleTest

评论


答: 暂无答案