您如何针对调用 exit() 的函数编写测试?

Ale*_*lke 5 c++ unit-testing cppunit exit

我有一个要测试的简单函数。函数是这样的:

void func()
{
    // do some work
    ...
    if(error_detected)
    {
        fatal_error("failure...");
        exit(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我必须编写一个产生错误的测试。只有exit(1)存在失败的测试,仍然如此!

这个案子一般是怎么处理的?

我可以重写/更改功能代码,因为我可以完全控制整个项目。但是,我正在使用 cppunit 并希望我可以将其作为套件中的测试之一。


更新:

关于所提出的一些解决方案,我想提出一个注意事项:添加了一个可以根据我们是否正在测试而以不同方式实现的接口并不是一种强大的测试方式。这是为什么?因为我将使用一个接口进行测试,该接口在测试中的实现与现实世界中的不同。测试结果并不能证明现实世界的情况会正常工作。至少不是 100%(它只能证明该路径确实是在特定情况下采用的。)

BЈо*_*вић 3

如果您使用 gtest,它有一个专门的部分(请参阅死亡测试),他们说:

任何检查程序是否以预期方式终止(抛出异常除外)的测试也是死亡测试。

如果您使用谷歌测试,那么您可以使用 来测试死亡测试ASSERT_DEATH

否则,您需要生成一个进程,执行测试并检查结果(生成的进程的返回值)。