使用断言

断言


1.断言的概念

  若确信某个属性符合要求,并且代码的执行依赖于这个属性。比如:需要计算 double y=Math.sqrt(x);
  上述可以确信的是x是一个非负数值。但是还是希望进行检查,以避免让“不是一个数”的数值参与计算操作。在这里可以抛出异常来处理这个问题,但是异常处理的代码在测试完毕之后不会自动删除,如果代码中含有大量的这种检查,程序运行起来也会很慢。
  断言机制就是允许在测试期间向代码中插入一些检查语句,。当代码发布时,这些插入的检测语句将会被自动移走(注意和异常检查的不同)。

  Java语言引入了关键字assert,两种形式:

①assert 条件;
②assert 条件:表达式;

  上述两种形式都会对条件进行检测,如果结果为false,则会抛出一个AssertionError异常。在第二种形式中,表达式将被传入AssertionError的构造器,并转换成一个消息字符串。

  要想断言x是一个非负数值,只需要简单的使用语句: assert x>=0; 或者将x的实际值传递给AssertionError对象,从而可以在后面显示出来 assert x>=0:x;
   注意:在Java中,条件并不会自动的成为错误报告中的一部分。如果希望看到这个条件,就必须将它以字符串的形式传递给AssertionError对象:assert x>=0:“x>=0”




2.启用和禁用断言

  默认情况下,断言被禁用。

    ①可以在运行程序时用-enableassertions或者-ea选项启用:java -enableassertions MyApp

  注意:在启用或者禁用断言时不必重新编译程序。启用或禁用断言是类加载器的功能。当断言被禁用时,类加载器将跳过断言代码,因此,不会降低程序的运行速度
也可以在某个类或者整个包中使用断言,如:
java -ea:MyClass -ea:com.mycompany.mylib… MyApp这条命令将开启MyClass类以及在com.mycompany.mylib包和它的子包中的所有类的断言。选项-ea将开启默认包中所有类的断言

    ②可以用选项-disableassertions或-da禁用某个特定类和包的断言:java -da:MyClass MyApp


    有些类不是由类加载器加载的,而是直接由虚拟机加载。可以使用这些开关有选择的启用或者禁用那些类中的断言。但是启用或者禁用所有断言的-ea和-da开关不能应用到那些没有类加载器的“系统类”上,对于这些系统来说,需要使用-enablesystemassertions/-esa开关启用断言




3.使用断言完成参数检查

    在Java语言中,给出了3种处理系统错误的机制:
抛出一个异常;日志; 使用断言

    那么什么时候应该使用选择断言呢?

1.断言失败是致命的,不可恢复的错误
2.断言检查只用于开发和测试阶段

    因此不应该使用断言向程序的其他部分通告发生了可恢复性的错误,或者,不应该作为程序向用户通告问题的手段。断言只应该用于在测试阶段确定程序内部的错误位置




4.为文档假设使用断言

例子:

if(i%3 == 0)

else if(i%3 == 1)

else // (i%3 == 2)

    上述代码例子使用断言会更好一些

if(i %3 == 0)

else if(i%3 == 1)

else
{
assert i%3 == 2;

}

    使用断言来进行自我检查,上述代码中 i%3 ,如果i是正值,那么余数肯定是0,1,2。如果i是负值,则余数则可以是-1,-2。但是实际上都认为i是非负数,因此,最好在if语句之前使用下列断言: assert i >=0;





IDEA中如何开启断言

1. 
在这里插入图片描述2.将选项中的内容修改为-enableassertions或者-ea,确认。即启用断言
在这里插入图片描述

### JMeter 断言使用方法 在 JMeter 中,断言用于验证服务器返回的数据是否满足特定条件。这有助于确保应用程序的行为符合预期并能及时发现潜在问题[^1]。 #### 创建简单的响应断言 为了创建一个基本的响应断言,在测试计划中的 HTTP 请求下右键点击选择 `Add` -> `Assertion` -> `Response Assertion`。配置如下: - **Apply to**: 可选 "Main sample only", "Sub-samples only" 或者 "Main sample and sub-samples". 这决定了断言应用的对象范围[^3]. - **Pattern Matching Rules (模式匹配规则)**: 定义如何比较实际结果与期望值之间的关系, 如包含、等于等. - **Patterns to Test (要测试的模式)**: 输入希望在响应中找到的文字串或正则表达式. 下面是一个具体的例子来说明怎样设置这些选项: 假设有一个 API 返回 JSON 数据 `{ "status": "OK" }`, 若要确认状态确实是 OK,则可按以下方式设定断言: ```plaintext Apply to: Main sample only Pattern Matching Rules: Contains Use Or: Checked Patterns to Test: \"status\": \"OK\" ``` 这样当收到的回复不符合上述标准时,JMeter 将报告该采样器失败[^4]. #### 高级用法 - 正则表达式提取变量 除了简单字符串匹配外,还可以利用正则表达式的强大功能来进行更复杂的校验工作。例如通过 RegEx Extractor 提取某些动态变化的信息作为后续请求参数的一部分,之后再对该信息实施进一步检验。 ```regex (?<="token":")(\w+)" ``` 这段正则可用于抓取出形似 `"token":"abcde..."` 的 token 值,并将其存储到指定变量名中供以后重用[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值