代码之家  ›  专栏  ›  技术社区  ›  Mohan Narayanaswamy

对于有效使用Java断言,你有什么建议吗?

  •  4
  • Mohan Narayanaswamy  · 技术社区  · 14 年前

    我不认为开发人员使用Java断言,但我非常热衷于使用它们。你能分享一些技巧来有效地使用它们吗?

    4 回复  |  直到 14 年前
        1
  •  6
  •   Pascal Thivent    14 年前

    我用 assert 检查 preconditions 属于 非公开 方法,仅此而已(我不主张按合同进行设计)。以防万一,让我提醒一下 用断言编程 写关于 Preconditions, Postconditions, and Class Invariants :

    虽然assert构造不是完整的 按合同设计 设施,它可以帮助支持一个非正式的设计契约式的编程。

    对于Java中的全面支持,可以考虑使用第三方库(从 Wikipedia ):

    Custos,Jass,STclass,Jass预处理程序,椭圆与AspectJ,Java建模语言,用于Spring框架,或现代的C语言,使用AspectJ,使用AspectJ,使用AspectJ,使用Java扩展。

        2
  •  4
  •   Pascal Cuoq    14 年前

    因为你的问题被标记为“Java”和“按合同设计”,而且没有提到JML,我想我会发布一个链接:

    http://www.eecs.ucf.edu/~leavens/JML/

    JML是一种在Java中编写合同的注释语言。契约可以通过运行时断言进行检查,也可以静态地进行验证。通过在JML社区中所做的一些挖掘,您可以在Java和其他语言中找到许多契约设计的良好原则和想法。JML为其他语言提供了类似的注释语言,例如spec(for.net)和acsl(for c)。

        3
  •  2
  •   Thorbjørn Ravn Andersen    14 年前

    assert s用于在代码中插入检查,这些检查在开发期间会非常严重地失败,在生产过程中会被忽略(由标志决定)。

    这是从C世界继承而来的,但是由于JUnit提供了更系统的方法,没有流行起来,例如,在JUnit中,您有独立的测试套件,可以随意运行。

    我建议您先使用JUnit等工具研究测试驱动开发,然后再研究 断言 像我一样,您很可能会发现断言不如单元测试有用。

        4
  •  1
  •   Bozhidar Batsov    14 年前

    我个人将断言用于所有不可恢复的病态场景——这就是它们的目的。这意味着我只断言应用程序逻辑中最关键的部分。当然,断言只能在开发和测试中启用。我们不想用它们来增加生产代码的负担,并且假设我们正确地测试了所有东西,这样用户就永远不会进入这样一个关键的场景。