ava*_*sen 13
我会assert在方法本身中使用Java 关键字来对后置条件进行编码.
单元测试还是后置条件?
单元测试和后置条件有不同的用途.
单元测试中的断言提供了对一个输入向量的方法结果的检查.它是一个oracle,指定了一个特定案例的预期结果.
一个assert 在该方法本身验证任何输入的后置条件成立.它是一个oracle指定(属性)所有可能情况的预期结果.这样的postcondition-as-oracle与自动化测试技术很好地结合,在这些技术中很容易生成输入,但很难为每个输入生成预期值.
番石榴后置条件?
至于为什么Guava有一个Precondition类,但没有Postcondition类,这是我的理解.
Guava Preconditions有效地为常见情况提供了许多简写,在这些情况下,您希望根据方法的输入或对象的状态抛出特定类型的异常(非法参数,空指针,索引越界,非法状态).
对于后置条件,这类常见案例较少.因此,不需要提供速记抛出特定种类的例外.失败的后置条件就像HTTP 500"内部服务器错误" - 我们知道执行我们的方法时出错了.
(请注意,Guava的前提条件概念与纯合同设计的概念完全不同,在合同设计中,如果不满足前提条件则根本没有保证 - 甚至不会抛出合理的异常.Guava的Preconditions类提供了有用的功能.使公共API更具防御性的能力).
先决条件和后置条件有着截然不同的目的.
前提条件测试输入,不受方法控制; postconditions测试输出,即.因此,它们在方法本身内部没有任何意义,但仅作为测试方法的外部代码.
但是,如果你真的想在你的代码中加入这样的断言,那么Guava Preconditions也可以很好地服务于它,即使这不是它们的预期目的.