Java断言及其使用

断言是一种调试程序的方法,在Java中,使用assert关键字来实现断言,断言格式如下:

assert boolean 表达式 : 详细信息

若boolean表达式的结果为true,则会忽略后面的详细信息;如果为false,则提示的错误内容为详细信息;如果没有生命声明信息的描述,则系统会使用默认的错误信息提示方式。

  1. public static void main(String[] args) {
  2. // 定义一个数组,长度为3
  3. int x[] = { 1, 2, 3 };
  4. // 此处断言数组长度为0,肯定是错误的
  5. assert x.length == 0;
  6. }

但此时运行程序并不会得到任何的结果,这是因为 Java 在设计此关键字时,考虑到了系统的应用,为了防止某些用户使用 assert 作为关键字,所以在程序正常运行时断言并不会起任何的作用,如果要想让断言起作用,则在使用 Java 运行时应该加入-enableassertions参数,可以简写为-ea。

下面使用”-ea“运行程序,运行程序格式如下:

编译程序:javac Test.java
验证程序:java -ea Test

程序运行时出现以下错误:

Exception in thread "main" java.lang.AssertionError

at Test.main(Test.java:6)

注意:

  • 断言失败时会抛出AssertionError,导致程序结束推出。因此,断言不能用于可恢复的程序错误,只应用于开发和测试阶段。
  • 虽然断言返回的是false,但是并不能将其作为条件判断语句。
  • 断言虽然有检查运行结果的功能,但是一般在开发中补偿到使用断言,更好的方法是编写单元测试。

举例:

  • assertEquals()方法:

判断两个对象是否相等,并返回boolean,int类型,前者为期望值,后者为输入值。

AssertEquals(返回值,Object expected, Object actual);

  • assertTrue() / assertFalse()

判断测试的错误,condition是期望,message是实际值

AssertTrue(condition,message);

assertFalse(condition, message);

  • assertArrayEquals()
  • 判断两个数组是否相等

assertArrayEquals(a[], b[]);

特别说明:

assertThat用法:

基本语法: assertThat(参数值,匹配值)

常用: is,    equalTo, containsString

@Test

public void testHamcrestMatchers(){

//allOf:所有匹配条件都必须满足,相当于&&

assertThat(“myname”, allOf(startsWith(“my”),containsString(“nme”)));

//anyOf:相当于一个满足就通过,相当于||

assertThat(“myname”, anyOf(startsWith(“na”),containsString(“name”)));

//both:&&

assertThat(“myname”,both(containsString(“my”)).and(containsString(“me”)));

//either: ||

assertThat(“myname”,either(containsString(“my”)).or(containsString(“you”)));

//everyItem:每个元素都满足特定条件

assertThat(Arrays.asList(“my”,”mine”),everyItem(startsWith(“m”)));

//hasItem:是否有这个元素

assertThat(Arrays.asList(“my”,”mine”),hasItem(“my”));

//hasItems:包含这个元素

assertThat(Arrays.asList(“my”,”mine”,”your”),hasItem(“your”,”my”));

//hasItems:包含多个元素

assertThat(Arrays.aslist(“my”,”mine”,”your”),hasItems(“your”,”my”));

//is:is(equalTo(x)) 或 is(instanceOf(clazz.class))的简写

assertThat(“myname”,is(“myname”));

assertThat(“myname”,is(String.class));

//anything():任何情况下,都匹配正确

assertThat(“myname”,anything());

//not:否为真,相当于!

assertThat(“myname”,is(not(“you”)));

//nullValue():值为空

String str = null;

assertThat(str,is(nullValue()));

//notNullValue():值不为空

String str2 = “123”;

assertThat(str2,is(notNullValue()));

//字符串匹配

//containsString : 包含字符串

assertThat(“myname”,containsString(“na”));

//stringContainsInOrder:顺序包含,“my”必须在“me”前面

assertThat(“myname”,stringContainsInorder(Arrays.asList(“my”,”me”)));

}

Java断言及其使用相关推荐

  1. java断言assert初步使用:断言开启、断言使用

    1 说明 java断言assert是jdk1.4引入的. jvm断言默认是关闭的. 断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说"断言不具有继承性". 断言只适 ...

  2. java断言——Assertion

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java断言--Assertion 的相关知识: [1]使用断言 1.1)断言机制: 允许在测 ...

  3. Java断言(assert)的介绍和使用

    Java断言(assert)的介绍和使用 在Java编程中,断言(assert)是一种有用的工具,用于在代码中进行条件检查和调试.通过使用断言,我们可以验证程序的逻辑和假设,确保程序在运行时达到预期的 ...

  4. java 断言 assert 初步使用:断言开启、断言使用

    主要总结一下在eclipse中如何使用断言. (一)首先明确: java断言Assert是jdk1.4引入的. jvm 断言默认是关闭的. 断言只适用于复杂的调试过程. 断言一般用于程序执行结果的判断 ...

  5. java 断言 assert 详解:断言开启、断言使用

    java中的断言Assert的使用 一.背景 二.如何判断是否开启了断言 三.开启断言 四.断言的使用 方法一.assert <boolean表达式> 方法二.assert <boo ...

  6. java断言、断点的使用方法,Java断言介绍和用法

    本文概述 断言是Java中的一条语句.它可以用来测试你对该程序的假设. 在执行断言时, 它被认为是正确的.如果失败, JVM将抛出一个名为AssertionError的错误.它主要用于测试目的. 断言 ...

  7. java 断言assert_Java中的断言 Assert

    今天正好遇到了,就记一下 一.作用: 仅用与编写单元测试, 一般不用于生产环境 assert 理论上和 if 类似, 但是assert 仅仅用于测试, 不能用于业务 from jdk 1.4 二.as ...

  8. Java断言(assert)

    一.概述 在C和C++语言中都有assert关键,表示断言.  在Java中,同样也有assert关键字,表示断言,用法和含义都差不多. 二.语法 在Java中,assert关键字是从JAVA SE ...

  9. java断言错误_java-获取断言错误,即使期望值和实际值相同

    在以下断言错误中需要帮助. 当我进行以下API调用时,尽管实际值和预期值都相同,但我却收到了此异常. import com.jayway.restassured.RestAssured; import ...

最新文章

  1. java编写一个通讯录_java写的通讯录(小玩意)
  2. 使用webpack打包后,vscode中vue代码变白色的解决办法
  3. Pytorch CookBook
  4. 使用 yo 命令行向导给 SAP UI5 应用添加一个新的视图
  5. ORACLE数据库恢复
  6. 级数求和(洛谷-P1035)
  7. 你的AJAX 请求真的安全?
  8. 3-25构造方法String类中的api
  9. 改变ALERT组件的背景色和背景透明度.
  10. idea导出Oracle表结构和数据
  11. Window环境MatConvNet安装
  12. 计算机如何把表格分成两排,wps表格怎么拆分单元格,excel单元格拆分两列
  13. html转换成pdf工具-wkhtmltopdf、Python生成PDF(pdfkit库)
  14. 【机械仿真】基于matlab打桩机运动学仿真【含Matlab源码 2101期】
  15. 二、分布式系统设计策略
  16. 如何成为一名合格的LINUX系统管理员
  17. node-telegram-bot-api 基于Nodejs的TG机器人
  18. XMail 安装配置使用 (1.27 )
  19. 金蝶服务器 运行错误 372,Win7运行用友T6软件提示错误372的原因及解决方法
  20. 秋招春招,网申在线测评中的智力测试

热门文章

  1. 电脑蓝屏是哪里出了问题?不一定要非要重装系统
  2. 1.什么是关系型数据库和非关系型数据库
  3. Shell脚本,环境变量,位置变量,预定义变量,自定义变量,单引号双引号反引号用法,一般变量和交互式变量read定义,密文输入变量信息
  4. 描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。
  5. 基于HTML5 Boilerplate创建自己的项目
  6. 模拟器玩《和平精英》匹配不到人,投屏吃鸡却火了?
  7. java ldap 工具_通过定义LdapUtil工具类实现JAVA关于LDAP协议目录数据保存和删除等操作代码示例...
  8. 微信小程序 实现视屏录制REC闪烁效果动画
  9. wsdl和wadl区别(转)
  10. Xcode 快捷键必看!