`

java中的断言

阅读更多

java中的断言

断言概述


  编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设
  可以将断言看作是异常处理的一种高级形式
  断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真
  可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。
  使用断言可以创建更稳定,品质更好且易于除错的代码
  当需要在一个值为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://www.blogjava.net/liulu/archive/2006/10/24/77005.html

分享到:
评论

相关推荐

    Java中断言使用案例

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

    Java断言(assert)

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

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

    在Java中,我们可以利用JUnit或TestNG这样的测试框架来组织和执行测试用例,这些框架提供了丰富的断言库。例如,JUnit中的`Assert.assertEquals()`方法可以用于检查网页元素的文本内容或属性值是否符合预期。 在...

    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. ...

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

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

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

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

    8、java断言..

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

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

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

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

    因为这种风格避免JUnit提供的断言中经常遇到的问题,expected在前还是actural在前的问题。相比于Hamcrest的断言风格,在日常工作中综合对比发现AssertJ的更加清晰,毕竟AssertJ中assertThat只需要接收一个参数,而...

    诊断 Java 代码: Java 编程中的断言和时态逻辑 另有翻译

    Java编程中的断言和时态逻辑是用于增强代码健壮性和正确性的重要工具。断言是一种编程实践,它允许开发者在代码中插入检查点,确保特定条件在特定时刻总是为真。这有助于在开发和测试阶段发现潜在的错误。然而,传统...

    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断言使用.pdf

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

    单元测试JUnit常用断言方法

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

    java接口自动化测试框架及断言详解

    "java接口自动化测试框架及断言详解" 本篇文章主要介绍了Java接口自动化测试框架及断言详解,通过示例代码详细地...通过本篇文章,读者可以了解Java接口自动化测试框架及断言详解的知识点,并且可以应用于实际项目中。

    eclipse如何开启断言assert

    在Java编程中,断言(Assert)是一种强大的调试工具,它允许程序员在代码中插入条件检查,以确保程序在特定点的行为符合预期。Eclipse作为流行的Java开发集成环境,提供了方便的方式来启用或禁用断言功能。以下是...

    Java常用词汇中英文对照

    Java常用词汇中英文对照 本文档提供了Java常用词汇的中英文对照,涵盖了许多术语的中英文对照,旨在帮助开发者更好地理解Java编程语言。... assert是Java中的一种断言机制,用于检查代码正确性。 ...

    一个Java体系结构测试库,用于在纯Java中指定和断言体系结构规则.zip

    Java体系结构测试库是软件开发中的一个重要工具,它允许开发者定义和验证代码的架构规则,以确保代码质量、模块化和可维护性。这个特定的库专注于在纯Java环境中进行这些操作,这意味着它无需依赖于特定的构建工具或...

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

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

    JMETER 断言几种方式

    BeanShell断言使用了BeanShell脚本语言,这是一种与Java语法兼容的轻量级脚本语言。你可以通过以下设置来配置BeanShell断言: - **Name**: 设置断言的名称,以便于识别。 - **Comments**: 添加注释,解释断言的...

Global site tag (gtag.js) - Google Analytics