抑制Boost.Test中的退出信号

时间:2018-03-01 10:22:20

标签: c++ windows boost-test

我想在我的程序中测试一个方法,它处理应用程序的关闭。最后,此方法调用exit(0);

正如预期的那样,这也关闭了我的测试应用程序。

是否有可能在此特定单元测试中捕获退出信号,因此可以避免关闭测试应用程序?

1 个答案:

答案 0 :(得分:1)

由于无法阻止exit()结束程序,因此您必须以某种方式更改遗留应用程序。

对于类似的问题,我使用了以下解决方案:

  • 通过公共静态函数提供我想要使用/更改的功能的类,例如
    static void Wrapper::exit( int exit_code);
  • 一个基类,用于声明我要提供的功能的界面:
    virtual void Base::exit( int exit_code) = 0;
  • 然后是一个派生自基类Base的类,它实现了正常的行为:
    void OsImpl::exit( int exit_code) { ::exit( exit_code); }
  • Wrapper类最后包含一个指向要使用的实现的指针,默认情况下为OsImpl的对象,但可以用例如TestImpl替换。 static void Wrapper::setImpl( Base* handler);无效的::exit( 0);Wrapper::exit( 0);
  • 最后,在应用程序中用 where: { and: sequelize.literal('("Student"."totalDays" + "Student"."presentDays" ) > 50 ') } 替换var arr = ["mod1"]; var replaced= $.map( arr, function( a ) { return a.replace("mod", ""); }); console.log(replaced);
    当“正常”运行时,应用程序将像以前一样停止,但在测试程序中,您可以使其返回测试功能

我知道这很浓缩,但我希望你明白这一点。