我没有看到很多开发人员使用Java Assert,但我非常热衷于使用它们。您能否分享一些有效使用它们的技巧?
答案 0 :(得分:6)
我使用assert
来检查非公开方法的preconditions,这就是全部(我没有声称按合同设计)。为了以防万一,让我提醒使用断言编程写有关Preconditions, Postconditions, and Class Invariants的内容:
虽然断言构造不是一个完整的按合同设计工具,但它可以帮助支持非正式的逐个合同编程风格。
要获得Java的全面支持,可以考虑使用第三方库(来自Wikipedia):
iContract2,Contract4J,jContractor,Jcontract,C4J,CodePro Analytix,STclass,Jass预处理器,带AspectJ的OVal,Java建模语言(JML),Spring框架的SpringContracts,或现代Jass,使用AspectJ的Custos,使用AspectJ的JavaDbC, JavaTESK使用Java扩展。
答案 1 :(得分:4)
由于您的问题被标记为“java”和“按合同设计”并且未提及JML,我想我会发布一个链接:
http://www.eecs.ucf.edu/~leavens/JML/
JML是一种用Java编写契约的注释语言。合同可以通过运行时断言检查或静态验证。通过挖掘JML社区中已经完成的工作,您可以在Java和其他语言中找到合同设计的大量优秀原则和想法。 JML为其他语言启发了类似的注释语言,例如Spec#(用于.NET)和ACSL(用于C)。
答案 2 :(得分:2)
assert
用于在代码中插入检查,这些检查在开发过程中会非常大声地失败并在生产期间被忽略(由标志确定)。
这是从C世界继承而来的,但由于采用了更为系统化的方法,因此没有流行起来。 jUnit你有独立的测试套件,可以随意运行。
我建议您使用以下方法查看测试驱动开发在assert
s调查太多时间之前的junit。你很可能会像我一样发现断言没有单元测试那么有用。
答案 3 :(得分:1)
我个人对所有不可恢复的病态场景使用断言 - 这是他们的目的。这意味着我只断言应用程序逻辑中最关键的部分。当然,断言仅在开发和测试中启用。我们不希望用它们加载生产代码,并且假设我们正确地测试了所有内容,因此用户永远不会陷入如此危急的情况。