我们的项目使用 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/