use*_*936 7 c++ exception assertion
我熟悉标准C++断言是如何工作的.这在我的项目中运行良好,可用于各种测试目的.
例如,假设我想检查我的代码是否抛出了某个异常.
如果不使用像CPPUnit这样的测试框架,这可能吗?
您可以手动执行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 包围测试的单元来捕获测试框架中的异常。但我不确定它是否真的值得。
华泰
归档时间: |
|
查看次数: |
4427 次 |
最近记录: |