Java断言及其使用

 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”)));

} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值