我想在我的程序中测试一个处理应用程序关闭的方法。最后这个方法调用 exit(0);
正如预期的那样,这也关闭了我的测试应用程序。
是否有可能在这个特定的单元测试中捕捉到退出信号,从而避免测试应用程序的关闭?
最佳答案
由于无法阻止 exit() 结束程序,您将不得不以某种方式更改遗留应用程序。
对于类似的问题,我使用了以下解决方案:
- 提供我想通过公共(public)静态函数使用/更改的功能的类,例如
static void Wrapper::exit( int exit_code);
- 声明我要提供的功能的接口(interface)的基类:
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);
当“正常”运行时,应用程序将像以前一样停止,但在您的测试程序中,您可以使其返回到测试功能。
我知道这很简洁,但我希望你能理解。
关于c++ - 在 Boost.Test 中抑制退出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49047499/