有没有一种方法可以在GTest中预期全局异常



我有一个场景,其中调用SendFeedback()发送消息并成功返回。该消息由另一个抛出的线程接收。CCD_ 2不工作,因为CCD_ 3不抛出自己。有没有办法期待这种例外?

伪代码:

auto listener = Listener();
auto sender = Sender();
...
sender.SendFeedback();
// listener throws due to unexpected feedback. This exception is to be expected

这并不是您所要求的,但GTest具有用于死亡测试的机制,在该机制中,您可以断言给定的调用会使程序崩溃。未捕获的异常调用std::terminate,默认情况下调用std::abort,从而传递断言。

我做了一些小的概念验证来验证它的工作原理:

void delayed_uncaught_exception()
{
using namespace std::chrono_literals;
std::thread thread([] { throw std::runtime_error("Error"); });
std::this_thread::sleep_for(50ms);
}
TEST(MyDeathTest, DelayedException)
{
ASSERT_DEATH(delayed_uncaught_exception(), "");
}

尽管,我强烈同意这个问题下的讨论,死亡测试可能不是最适合这种测试场景的,从长远来看,我建议重新设计流程。

我为通信库编写了类似的测试程序。我使用了一个独立的通信通道将结果发送回gtest线程。接收器线程必须捕获异常并将结果发送回进程的gtest线程。这个通信通道可以只是一个全局变量或某种消息队列,但这两个线程必须同步。我发现障碍对此很有用。

相关内容

  • 没有找到相关文章

最新更新