可能重复:
通过断言或异常的合同测试设计?
在决定使用异常而不是断言时(或反之亦然),是否遵循经验法则.现在我只会抛出我认为会在用户端运行时发生的事情(如套接字或文件错误).我使用的几乎所有其他东西都断言.
另外,如果我要抛出一个断言,那么抛出一个很好的标准对象是什么?IIRC有std :: logic_error但是这不是一个好的对象吗?我会丢失文件或意外输入(例如从命令行而不是前端应用程序)?
Mik*_*fer 40
我的经验法则:
异常用于运行时错误条件(IO错误,内存不足,无法获取数据库连接等).
断言用于编码错误(此方法不接受空值,并且开发人员仍然传递了一个).
对于具有公共类的库,在公共方法上抛出异常(因为这样做是有意义的).断言用于捕捉你的错误,而不是他们的错误.
编辑:由于空值示例,这可能不完全清楚.我的观点是你使用断言(正如其他人指出的那样)应该永远不会发生的条件,因为这些条件永远不应该成为生产代码.在单元测试或QA测试期间,这些条件绝对必定失败.
我使用断言来处理那些不应该发生但却发生的事情。当这种情况发生时,开发人员需要重新审视错误的假设。
我对其他一切都使用例外。
在可重用代码中,我更喜欢异常,因为它使调用者可以选择处理或不处理问题。只需尝试捕获并处理断言即可!
您可以在特殊情况下使用异常。例如内存不足或网络故障。
您可以使用断言来确定是否满足某个前提条件。例如,指针不为 NULL 或整数在某个范围内。
归档时间: |
|
查看次数: |
38993 次 |
最近记录: |