C++断言函数,用于检查是否抛出异常

use*_*936 7 c++ exception assertion

我熟悉标准C++断言是如何工作的.这在我的项目中运行良好,可用于各种测试目的.

例如,假设我想检查我的代码是否抛出了某个异常.

如果不使用像CPPUnit这样的测试框架,这可能吗?

jPl*_*tte 7

您可以手动执行CPPUnit执行的操作:

bool exceptionThrown = false;

try
{
    // your code
}
catch(ExceptionType&) // special exception type
{
    exceptionThrown = true;
}
catch(...) // or any exception at all
{
    exceptionThrown = true;
}

assert(exceptionThrown); // or whatever else you want to do
Run Code Online (Sandbox Code Playgroud)

当然,如果你经常使用这个模式,那么使用宏是有意义的.


Lio*_*ior -4

代码内断言通常用在方法的开头,以便在进入此特定函数之前确认满足某些先决条件,例如:

Window::paint()
{
  assert(m_device != NULL);
  m_device->repaintRegion();
}
Run Code Online (Sandbox Code Playgroud)

它们在这里主要是为了捕获方法或类之间未满足的依赖关系的错误

测试框架中的断言是不同的,通常用于单元测试,以确保单元返回它需要返回的任何内容。

通常,当现实(即外部系统)为我们提供了代码无法/不应该处理的情况时,应该抛出异常。这是解决罕见但仍可预见的问题的简单方法。例如 - 等待通常可用的服务器超时。或者,内存不足。我不会用它作为编程逻辑的辅助。

对于您的问题,可能有一种方法可以通过使用 try-catch 包围测试的单元来捕获测试框架中的异常。但我不确定它是否真的值得。

华泰

  • 我根本不明白这有什么帮助。 (3认同)