提问人:gruszczy 提问时间:10/24/2023 更新时间:10/24/2023 访问量:29
gtest:最终会EXPECT_
gtest: EXPECT_ eventually
问:
我正在测试本质上是异步产生结果的代码。我没有能力注入细粒度的仪器来控制流量。我想在运行断言之前等待结果。
现在我需要这样做:
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 方法(另外 - 如果已经有其他故障,我不想清除它)。
(我知道上面的代码不是内存安全的,它只是一个演示)
我有什么方法可以解决这个问题吗?
答: 暂无答案
评论