我没有看到很多开发人员使用Java Assert,但我非常热衷于使用它们。你能分享一些有效使用它们的技巧吗?
发布于 2010-04-26 08:19:41
我使用assert来检查非公共方法的preconditions,仅此而已(我并不要求做契约式设计)。为了以防万一,让我提醒一下使用断言进行编程会对Preconditions, Postconditions, and Class Invariants有什么影响
虽然assert构造不是成熟的契约式设计工具,但它可以帮助支持非正式的契约式设计风格的编程。
要在Java中获得全面的支持,可以考虑使用第三方库(来自Wikipedia):
iContract2、Contract4J、jContractor、Jcontract、C4J、JavaDbC、STclass、Jass预处理器、带AspectJ的OVal、CodePro建模语言、用于Spring框架的SpringContracts或现代Jass、使用AspectJ的自定义、使用AspectJ的JavaDbC、使用Java扩展的JavaTESK。
发布于 2010-04-26 07:50:42
由于您的问题被标记为"java“和”契约式设计“,并且没有提到JML,我想我应该发布一个链接:
http://www.eecs.ucf.edu/~leavens/JML/
JML是一种用于在Java中编写契约的注释语言。契约可以通过运行时断言检查,也可以静态验证。通过深入研究JML社区所做的工作,您可以在Java和其他语言中找到大量关于契约式设计的好原则和想法。JML启发了其他语言的类似注释语言,例如Spec# (用于.NET)和ACSL (用于C)。
发布于 2010-04-24 14:51:56
assert用于在代码中插入检查,这些检查在开发过程中会非常响亮地失败,并且在生产过程中会被忽略(由标志确定)。
这是从C世界继承下来的,但由于jUnit提供了更系统的方法,所以没有流行起来,在这种方法中,你有独立的测试套件,可以随意运行。
我建议你在花太多时间研究assert之前,先使用junit进行测试驱动开发,你很可能会发现,像我一样,断言不如单元测试有用。
https://stackoverflow.com/questions/2703480
复制相似问题