c++ - 在 Boost.Test 中抑制退出信号

标签 c++ windows boost-test

我想在我的程序中测试一个处理应用程序关闭的方法。最后这个方法调用 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/

相关文章:

C++类成员变量知道自己的偏移量

c++ - std::fill 的 Clang 静态参数导致链接器失败

python - pygtk 在 Windows XP 中崩溃

c++ - boost.test 与 CppUnit

c++ - 在 xcode 4 中提升测试输出

c++ - Boost.Test如何创建 "test dependency"

c++ - 将内存写入文件缓冲区如何改变它?

c++ - 最终链接失败 : Invalid argument when including windows. h

c++ - 在网络第 3 层和第 2 层编程

c++ - 在 header 中的宏中初始化结构体,必须在 C 和 C++ 源代码中工作