c++ - 如何运行 Boost Test 并生成 Minidump?

标签 c++ unit-testing boost boost-test google-breakpad

我们的项目使用 Boost.Test 进行单元测试。我们也希望在测试用例期间发生意外异常时获得小型转储,因此我们开始集成 Google Breakpad 来编写小型转储。

看起来 Boost.Test 正在拦截用户测试中抛出的所有异常 - 我假设是因为 Boost 测试用例用 try/catch 包装每个函数,并且如果抛出意外异常,单元测试就会失败。这可以防止 Breakpad 异常处理程序触发和写入小型转储。

是否有可能让 Boost.Test 不仅仅捕获单元测试中的意外异常并失败?而是让异常不被处理(或重新抛出),以便可以触发 Breakpad 或另一个异常处理程序来写入小型转储?

最佳答案

Boost.Test 旨在捕获测试用例中的所有异常,以便继续执行其他测试用例。我认为您无法关闭此行为,但您可以随时查阅源代码。

为了实现您的目标,我会自己包装测试用例的主体并捕获异常,并在引发意外异常时写出 Breakpad 小型转储。您可以通过将 catch/dump 处理程序编写为一个函数来通用化它,该函数接受作为您的测试用例主体的仿函数,并使用 lambda 中的测试用例主体调用您的处理程序:

void handler(std::function<void()> test_case)
{
  try {
    test_case();
  } catch (...) {
    write_minidump();
  }
}

BOOST_AUTO_TEST_CASE(doit)
{
  handler([] {
    // do testing here
  });
}

如果您使用固定装置,则会涉及更多内容,但同样的想法也适用。

关于c++ - 如何运行 Boost Test 并生成 Minidump?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46555660/

相关文章:

c++ - std::atomic_flag 作为成员变量

c++ - 如何将字节数据从套接字写入 C 中的无符号字符 vector ?

python - 将模拟对象添加到 sqlalchemy 集合中会引发异常

c++ - boost mpfr_float 的序列化

c++ - 澄清在 boost::strand 中执行的内容

c++ - 强制链接未使用的共享库

c++ - 我需要遍历一个结构

ruby-on-rails - 为 Rails 中的一个 TestCase 切换 DB-Connection

javascript - Vue-test-utils 包装器未定义

c++ - 使用 Boost Spirit 解析十六进制值