断言很久没看竟然忘记怎么用了,今天复习下:
为什么使用断言:
编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设可以将断言看作是异常处理的一种高级形式 断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。
使用断言可以创建更稳定,品质更好且易于除错的代码 当需要在一个值为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!");
}
}
}
分享到:
相关推荐
JMETER 断言几种方式 在JMETER 性能测试过程中间,为了检查测试中得到的响应内容是否跟...PS:一个Sampler可以添加多个断言,根据你的检查需求来添加相应的断言,当Sampler下所有的断言都通过了,那么才算request成功。
静态断言(编译时断言)不同于运行时断言哈。
Cadence公司的断言验证手册,介绍基于SVA的断言验证注意事项。
在讲解之前,我们先来对断言做一个基本的介绍,让大家对断言有一个大致的了解。
jmeter配合CSV,JSON断言测试,有demo可以用
断言Vuex状态Assertion for Vuex state
单元测试 JUnit 断言 注解 mock Unitils spring 注解
JUnit常用断言方法JUnit常用断言方法.txtJUnit常用断言方法.txt
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. ...
该部分代码主要用于immediate assertions 和concurrent assertions 采样点的演示
SystemVerilog基于断言的验证技术
python:playwright 自动等待和断言(csdn)————程序
让你轻松查阅Debug时令人崩溃的Assert报错原因,包括断言、所在函数、具体位置以及错误解析。
SCJP 310-055 题库Module 4 异常和断言
Swift视频教程:Swift基础,断言
对一个线性状态机的时序进行断言,使用的是Systemverilog语言,是初学SVA验证的入门。 线性状态机有IDEL,WAIT0,CNT1,,,CNT6,WAIT6,NEXT_BLK共16个state 资源说明:包含DUT代码,断言代码,断言说明pdf,以及...
非常好的介绍 verilog assertion的英文原版书籍,比那些词不达意的翻译,看原版才是最好的选 择
新版正则表达式。包括零宽断言,正则替换的150种表达方式
jmeter实例(json断言+参数化),检查点详细介绍、正则表达式使用方法、JSON断言、CSV参数化
1-assert(断言).pdf