如何运行增强测试并生产小型

How to run Boost Test and produce Minidumps?

本文关键字:测试 小型 增强 何运行 运行      更新时间:2023-10-16

我们的项目使用boost.test进行单位测试。当我们的测试案例中出现意外例外时,我们想获得微型机,因此我们已经开始整合Google Breakpad来编写Minidumps。

看起来BOOST.TEST正在拦截用户测试中的所有抛出的异常 - 我认为,因为Boost测试用例将每个功能包裹在尝试/捕获量中,并且如果引发了意外的异常,则单位测试只是失败。这样可以防止闪烁的异常处理程序射击和写微型机。

是否有可能具有boost。检验不仅在单位测试中出现意外例外捕获和失败吗?而是要让异常不接受(或重新启动),因此可以触发breghpad或另一个异常处理程序来写微型仪?

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

为了实现您所追求的目标,我会自己包裹测试用例的身体,并捕获例外,并在抛出意外例外时写出了闪烁的小型机。您可以通过写下捕获/转储处理程序作为接受函数的函数来通用此功能,该功能是您的测试用例主体,并用lambda中的测试用例主体调用处理程序:

void handler(std::function<void()> test_case)
{
  try {
    test_case();
  } catch (...) {
    write_minidump();
  }
}
BOOST_AUTO_TEST_CASE(doit)
{
  handler([] {
    // do testing here
  });
}

,如果您使用的是固定装置,它将更多地参与其中,但同样的想法将适用。

我尝试了几种不同的方法,但是以下解决方案提供了最佳结果。定义一个宏来包裹boost_auto_test_case宏,并用seh __try/__围绕调用代码,除了将异常数据输送到brkerpad中。

#define CUSTOM_AUTO_TEST_CASE( test_name )                                                                  
void test_name##_custom_wrapper();                                                                          
                                                                                                            
BOOST_AUTO_TEST_CASE( test_name )                                                                           
{                                                                                                           
    __try                                                                                                   
    {                                                                                                       
        test_name##_custom_wrapper();                                                                       
    }                                                                                                       
    __except(pHandler->WriteMinidumpForException(GetExceptionInformation()), EXCEPTION_EXECUTE_HANDLER) {}  
}                                                                                                           
                                                                                                            
void test_name##_custom_wrapper()                                                                           

phandler是bresspad exceptionhandler指针。

不利的一面是,您必须用包装器宏替换每次出现boost_auto_test_cast。但是它可以解决问题。