你是否想告别system.out.println()测试时代,那么就重断言开始,可能你开始会觉得很麻烦,但是你习惯以后你会得心应手。如果你能看明白 boolean?a:b 这个三元运算的话,那么恭喜你断言你基本掌握了,不相信?那么就往下看看
断言机制是支持jdk1.4以上版本。他有个开关功能(下文会介绍),你想打开就开,你想关就关。这个可比满屏幕的输出语句专业多了。
断言表达式
assert expression;
assert expression1 : expression2;
在两种表达式中,expression1表示一个boolean表达式,expression2表示一个基本类型或者是一个对象(Object) ,基本类型包括boolean,char,double,float,int和long。由于所有类都为Object的子类,因此这个参数可以用于所有对象。
例子:
assert value > 5 ;
assert accontBalance > 0;
assert isStatusEnabled();
assert a>5:"TEST ASSERT"
何为断然的开关,无非就是传递一个参数 例: java -ea 你的JAVA程序。
- 参数 -esa和 -dsa:
它们含义为开启(关闭)系统类的assertion功能。由于新版本的Java的系统类中,也使了assertion语句,因此如果用户需要观察它们的运行情况,就需要打开系统类的assertion功能 ,我们可使用-esa参数打开,使用 -dsa参数关闭。 -esa和-dsa的全名为-enablesystemassertions和-disenablesystemassertions,全名和缩写名有同样的功能。 - 参数 -ea和 -ea:
它们含义为开启(关闭)用户类的assertion功能:通过这个参数,用户可以打开某些类或包的assertion功能,同样用户也可以关闭某些类和包的assertion功能。打开assertion功能参数为-ea;如果不带任何参数,表示打开所有用户类;如果带有包名称或者类名称,表示打开这些类或包;如果包名称后面跟有三个点,代表这个包及其子包;如果只有三个点,代表无名包。关闭assertion功能参数为-da,使用方法与-ea类似。
-ea和-da的全名为-enableassertions和-disenableassertions,全名和缩写名有同样的功能。
下面表格表示了参数及其含义,并有例子说明如何使用。
参数 例子 说明 -ea java -ea 打开所有用户类的assertion -da java -da 关闭所有用户类的assertion -ea:<classname> java -ea:MyClass1 打开MyClass1的assertion -da:<classname> java -da: MyClass1 关闭MyClass1的assertion -ea:<packagename> java -ea:pkg1 打开pkg1包的assertion -da:<packagename> java -da:pkg1 关闭pkg1包的assertion -ea:... java -ea:... 打开缺省包(无名包)的assertion -da:... java -da:... 关闭缺省包(无名包)的assertion -ea:<packagename>... java -ea:pkg1... 打开pkg1包和其子包的assertion -da:<packagename>... java -da:pkg1... 关闭pkg1包和其子包的assertion -esa java -esa 打开系统类的assertion -dsa java -dsa 关闭系统类的assertion 综合使用 java -dsa:MyClass1:pkg1 关闭MyClass1和pkg1包的assertion
其中...代表,此包和其子包的含义。例如我们有两个包为pkg1和pkg1.subpkg。那么pkg1...就代表pkg1和pkg1.subpkg两个包。
另外,Java为了让程序也能够动态开启和关闭某些类和包的assertion功能,Java修该了Class和ClassLoader的实现,增加了几个用于操作assert的API。下面简单说明一下几个API的作用。
ClassLoader类中的几个相关的API:
setDefaultAssertionStatus:用于开启/关闭assertion功能
setPackageAssertionStatus:用于开启/关闭某些包的assertion功能
setClassAssertionStatus: 用于开启/关闭某些类的assertion功能
clearAssertionStatus:用于关闭assertion功能
讲了这么多,给一个例子就全明白了:
public static void main(String[] args) {
int a=5;
assert a==6:"错误";
System.out.println(a);
}
世界最简单的测试,你可以修改 a的值看看不同的效果;很简单。
注意: 首先 断言是不支持继承,如果如果超类没有开启断然,子类开启,那么只执行子类。
断然是可以修改变量值的,什么意思,给大家一个测试断然开始的程序。正好利用断言修改变量值的特性
// public static void main(String[] args) {
// boolean assertFlag=false;
// assert assertFlag=true;
// if(assertFlag==false){
// System.out.println("assert have not opened");
// }else{
// System.out.println("assert is openning");
// }
//
// }
本总结资料来源于网络