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