Java中的断言 Assert

今天正好遇到了,就记一下

一.作用:

仅用与编写单元测试, 一般不用于生产环境

assert 理论上和 if 类似, 但是assert 仅仅用于测试, 不能用于业务

from jdk 1.4

二.assert 关键字(Java断言)

1. 使用断言

要添加断言,只需使用assert关键字并为其赋予布尔条件

        boolean dd = false;
        try {
            assert dd == true;
        } catch (AssertionError e) {
            System.out.println(e.getMessage());  // null
            e.printStackTrace();
        }
        boolean dd = false;
        try {
            assert dd == true : " dd is false";
        } catch (AssertionError e) {
            System.out.println(e.getMessage());  // dd is false
            e.printStackTrace();
        }

断言将抛出一个异常信息用于构造 AssertionError

2. AssertionError处理

注意这个抛出的是Error , 而不是被捕获的 Exception, 因此不需要尝试捕获(try catch)

AssertionError extends Error 

3. 在IDE中启用断言

如果发现断言无效, 则可能时ide没配置 😂

需要配置VM参数

  • eclipse:

  • idea:

三.JUnit 断言

几个方法:

  1. void assertEquals(boolean expected, boolean actual)
    检查两个变量或者等式是否平衡
  2. void assertTrue(boolean expected, boolean actual)
    检查条件为真
  3. void assertFalse(boolean condition)
    检查条件为假
  4. void assertNotNull(Object object)
    检查对象不为空
  5. void assertNull(Object object)
    检查对象为空
  6. void assertSame(boolean condition)
    assertSame() 方法检查两个相关对象是否指向同一个对象
  7. void assertNotSame(boolean condition)
    assertNotSame() 方法检查两个相关对象是否不指向同一个对象
  8. void assertArrayEquals(expectedArray, resultArray)
    assertArrayEquals() 方法检查两个数组是否相等

四、使用断言

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

posted @ 2017-09-08 23:05  小鸣Cycling  阅读(14610)  评论(0编辑  收藏  举报