通过合同和断言声明进行设计

Cra*_*lus 5 java assert design-by-contract post-conditions

我对这种Design by Contract方法很感兴趣.似乎preconditions必须使用已检查的异常来强制执行它们.
但是post-conditions,class-invariants我认为这assertions是首选.
我对吗?如果我是正确的,为什么允许post-conditionsclass-invariants禁用可能被禁用的断言?不应该强制执行后置条件和不变量吗?

Lou*_*man 8

只有在组件本身写错时,组件上的发布条件和类不变量才会失败.单元测试应该能够捕获所有这些.当然,允许在生产中实际检查它们,但这不一定值得性能权衡.

另一方面,如果该组件的用户不正确,则前提条件可能会失败.对组件本身的测试无法检查这些,因此必须更积极地失败,以便这些单元测试失败.

  • 如果您的代码允许类变量在任何情况下都失败,那么代码中的错误就是错误.如果使用无效输入调用代码,则调用者代码中的错误. (2认同)