`

JAVA断言

阅读更多

JAVA断 言使用

[转自] http://www.blogjava.net/liulu/archive/2006/10/24/77005.html

 

相信学过c,c++的朋友一定不会对断言感到陌生。下面介绍一下断言在JAVA中的使用,JAVA是从JDK1.4 才开始支持断言的(添加了关键字 assert),请注意老版的JRE不支持。



断言概述

编写代码时,我们总是会做出一些假设,断言就是用于 在代码中捕捉这些假设
可以将断言看作是异常处理的一种高级形式
断言表示为一些布尔表达式,程序员相 信在程序中的某个特定点该表达式值为真
可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行 后,最终用户在遇到问题时可以重新起用断言。
使用断言可以创建更稳定,品质更好且易于除错的代码
当需要在一个值为FALSE时中 断当前操作的话,可以使用断言
单元测试必须使用断言(Junit/JunitX)
除了类型检查和单元测试外,断言还提供了一种确 定个种特性是否在程序中得到维护的极好的方法
使用断言使我们向按契约式设计 更近了一部

常见的断言特性


  前置条件断言:代码执行之前必须具备的特性
  后置条件断言:代码执行之后必须具备的特性
  前后不变断言:代码执行前后不能变化的特性

断言使用方式


  断言可以有两种形式
  1.assert Expression1
  2.assert Expression1:Expression2
  其 中Expression1应该总是一个布尔值,Expression2是断言失败时输出的失败消息的字符串。如果Expression1为假,则抛出一 个 AssertionError,这是一个错误,而不是一个异常,也就是说是一个不可控制异常 (unchecked Exception),AssertionError由于是错误,所以可以不捕获,但不推荐这样做,因为那样会使你的系统进入不稳 定状态。

起用断言


  断言在默认情况下是关闭的,要在编译时启用断言,需要使用source1.4标记 既 javac source1.4 Test.java ,在运行时启用断言需要使用 -ea参数 。要在系统类中启用和禁用断言可以使 用 -esa 和 -dsa参数。
  
例如:
public class AssertExampleOne{
   public AssertExampleOne(){}
   public static void main(String args[]){
      int x=10;
      System.out.println("Testing Assertion that x==100");
      assert x==100:"Out assertion failed!";
      System.out.println("Test passed!");
   }
}
 

如果编译时未 加 -source1.4,则编译通不过
在执行时未加 -ea 时输出为
Testing Assertion that x==100
Test passed
jre 忽略了断言的就代码,而使用了该参数就会输出为
Testing Assertion that x==100
Exception in thread "main" java.lang.AssertionError: Out assertion failed!
        at AssertExampleOne.main(AssertExampleOne.java:6)

断言的副作用


  由于程序员的问题,断言的使用可能会带来副作用 ,例如:
 
boolean isEnable=false;
  //...
  assert isEnable=true;
   这 个断言的副作用是因为它修改了程序中变量的值并且未抛出错误,这样的错误如果不细心的检查是很难发现的。但是同时我们可以根据以上的副作用得到一个有用的 特性,根据它来测试断言是否打开。

 
public class AssertExampleTwo{

   public static void main(String args[]){
     boolean isEnable=false;
     //...
     assert isEnable=true;
     if(isEnable==false){
       throw new RuntimeException("Assertion shoule be enable!");
     }
   }
}
 

何时需要使用断言


  1.可以在预计正常情况下程序不会到达的地方放置断言 :assert false
  2.断言可以用于检 查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)
  3.使用断言测 试方法执行的前置条件和后置条件
  4.使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如age属性应大于0小于某个合 适值)

什么地方不要使用断言


  断言语句不是永远会执行,可以屏蔽也可以启用
因此:
  1. 不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行(也就是说断言应该尽量用在编译阶段确定的变量值)
  2.断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法 的返回值

参考:
http://jcp.org/en/jsr/detail?id=41
http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html
http://www-128.ibm.com/developworkers/cn/java/jdiag0723/
http://www-128.ibm.com/developworkers/cn/java/jmerlin/part9/
分享到:
评论

相关推荐

    Java断言(assert)

    Java断言(assert) Java断言是一种 debugging 机制,允许开发者在Java程序中添加检查点,以确保程序的正确性。断言可以在开发和测试阶段使用,以确保程序的正确性和可靠性。 Java断言的历史 Java断言是从 JDK 1.4 ...

    JAVA断言技术详解

    JAVA断言技术详解,1、What will happen when you attempt to compile and run the following code? (Assume that the code is compiled and run with assertions enabled) 1. public class AssertTest 2. { 3. ...

    Selenium-java断言(90)【2021-02-02】.docx

    本文将主要围绕Selenium在Java环境下的断言操作进行详细阐述,并结合其他相关知识点进行扩展。 断言在软件测试中扮演着至关重要的角色,它是验证预期结果与实际结果是否一致的关键步骤。在Selenium中,我们可以通过...

    8、java断言..

    如果你认真学习每个ppt并自己敲完这些实例,你的java基础已经很优秀了!这些资料就是某些大学和培训机构一个学期或更长时间学习的! 为的是共同学习,共同进步! 注:本资料不承担任何法律责任!

    Java中断言使用案例

    Java断言是一种机制,用于在开发和测试阶段插入条件检查,以便快速捕获不合理的或错误的代码行为。断言语句通常包含一个布尔表达式,如果该表达式为`false`,则表明出现了程序员没有预见到的情况,程序会抛出`...

    编程语言JAVA断言使用.pdf

    在探讨Java编程语言中的断言使用时,我们首先需要了解断言是一种开发调试工具,用于在程序运行时检查代码中的特定条件是否满足。如果条件为真,则程序正常运行;如果为假,则会抛出一个AssertionError异常,终止程序...

    zzxwill#zhouzhengxi.com#java断言测试1

    - "断言"*@Function:断言public class TestAssert {开启MyEclipse对断言的支持。

    JAVA的流畅断言库AssertJ.zip

    AssertJ 是 JAVA 的流畅断言库。示例代码:// unique entry point to get access to all assertThat methods and utility methods (e.g. entry) import static org.assertj.core.api.Assertions....

    JAVA 认证 考试题目

    JAVA 认证考试题目涵盖了 JAVA 语言的各个方面,包括垃圾收集、类的声明、注释方法、基本数据类型、代码运行结果、switch 语句、断言和异常处理等。只有通过深入学习和实践,才能更好地掌握 JAVA 语言。

    Assertions-in-java.rar_REvision_site:www.pudn.com

    在本复习资料中,我们将深入探讨Java断言的概念、用法以及其在软件开发过程中的重要性。 1. **断言概念** 断言是一种编程语句,用于声明某个点上的程序状态。它包含一个布尔表达式,该表达式预期为真。如果表达式...

    Java几种常用的断言风格你怎么选

    Java断言风格选择 Java断言是一种常用的软件测试技术,用于验证软件系统的正确性。Java提供了多种断言风格供选择,包括Assert风格、BDD风格等。在日常工作中,不管是写Unit Test,还是采用TDD的编程方式进行开发,...

    truth,java单元测试的断言/命题框架.zip

    当我们谈论"truth,java单元测试的断言/命题框架"时,这里涉及到的是一个名为Truth的开源项目,它旨在提升Java单元测试中断言的清晰度和可读性。Truth不仅是一个强大的工具,也是一个优秀的实践,帮助开发者编写更加...

    java异常处理机制示例(java抛出异常、捕获、断言)

    断言(Assertion)是Java中的一个功能,用于在开发阶段检查程序状态。在`AssertTest`中,使用`assert`语句来确保除数不为零。如果条件不满足,断言失败,程序会抛出`AssertionError`异常。在生产环境中,断言通常是...

    浅析Java异常处理中断言的使用

    Java断言的语法有两种形式: 1. `assert <布尔表达式>;` 2. `assert <布尔表达式> : <细节描述>;` 第一种形式仅包含一个布尔表达式,如果表达式的值为`false`,则抛出`AssertionError`异常。第二种形式在表达式...

    java 面试题集 (JAVA程序员面试)

    Java 断言机制 - **断言**:用于开发阶段检测程序的假设是否成立,一般在发布版本中禁用。 - **使用方法**: - 在源代码中使用`assert`关键字编写断言表达式。 - 编译时可以通过命令行参数`-ea`开启全局断言功能...

    JAVA程序设计——异常和断言

    JAVA程序设计中的异常和断言是程序开发过程中的重要概念,它们帮助开发者处理程序运行时可能出现的问题,确保程序的稳定性和可靠性。 异常处理是JAVA语言中的一个关键特性,用于处理程序执行过程中出现的非正常情况...

    EvgenyMandrikov_Marc_Hoffmann_Java_Coverage_mechanics.pdf

    例如,下面的 Java 代码片段展示了如何使用断言来代替探针: ```java public class Fun { public void fun(boolean x) { assert x; // 当 x 为 false 时抛出 AssertionError } } ``` 在字节码级别,这段代码会...

    assertj-jar.zip

    而AssertJ是一个强大的、富于表达力的Java断言库,它提供了比Java内置的`java.util.Assert`更丰富的功能和更友好的API,极大地提升了测试代码的可读性和可维护性。 AssertJ的核心库,即`assertj-core`,是其主要...

    单元测试JUnit常用断言方法

    ### 单元测试JUnit常用断言方法 #### JUnit简介 JUnit是一款用于Java语言的单元测试框架,由Kent Beck与Erich Gamma共同开发维护。它主要用于编写和运行可重复的测试案例,帮助开发者确保代码质量并及时发现潜在...

Global site tag (gtag.js) - Google Analytics