前置条件断言
1、什么是断言
断言(assert),是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。
断言的使用通常在单元测试中,使用断言可以创建更稳定,品质更好且不易于出错的代码。
2、断言特性:
前置条件断言:代码执行之前必须具备的特性
后置条件断言:代码执行之后必须具备的特性
前后不变断言:代码执行前后不能变化的特性
3、前置条件断言
程序的业务逻辑处理,一般是有必须满足的条件,才能进行对应的处理,否则就不能正确的执行。
而代码开发中,如果不在业务处理前,对其所需的条件进行判定,则在后续中,就会出现各种隐患。
在PRD中,对于业务逻辑,也是有一定满足条件才能执行的。
在敏捷开发中,TDD是其一项核心实践。
在测试用例中,对于测试场景来说,也是应有前置条件的约束的。
那么,综上所诉,是不是在写业务功能之前,进行断言判断呢?
答案是肯定的,进行前置条件断言,不仅符合业务实际,也对代码规范进行了约束,同时,也会避免大量的不必要的隐患。
在项目中,我们通过在应用接口层进行对外交互。那么对应的,条件断言,也应在这里进行。
我们假设,进行断言,如果不通过,则抛异常码,并且显示在返回结果中。 那么,首先,应定义全局异常码,在项目中,每个码都应唯一并且有确定的含义。
在全局异常码,可以根据业务,进一步分为错误码,转向提示码。
错误码,很容易理解,他的信息可以由用户或上游调用方显示看到。
转向提示码,则是需要根据码,可以进行一些对应业务处理,比如,用户登录信息session超时,可以使用转向提示码,通知上游,直接转向登录页面。
4、断言执行流程
接下来,我们可以简单的尝试一下做个断言工具类 AssertUtils。
public class AssertUtils {
/**
* check if source is equals target.<p>
* if source == null && target == null,will not throws Exception
* @param code
* @param source
* @param target
*/
public static void eq(int code,Object source,Object target) {
boolean eq = false;
eq = source == null ? target == null ? true : false : target == null ? false : source.equals(target) ;
if(!eq)
ExceptionUtils.throwSimpleEx(code);
} }
ExceptionUtils是自定义异常Utils,里面对异常进行了封装,并且对code进行了配置注册。 在使用上,我们可以这样来使用:
int a1 = 12;
Integer a2 = 123;
AssertUtils.eq(1401,a1,a2);
就对a1和a2进行了相等的断言,不符合,则抛出1401的异常码。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 看完这篇文章,99%的人都会使用Mysql Explain工具
- 浅析MySQL存储引擎序列属性
- 详述MySQL Using intersect交集算法
- 案例:强制开库遭遇ORA-16433的处理过程
- 叮~AutoML自动化机器学习入门指南,来了
- 注意:ORACLE 11G ADG RAC 这个情况下并不能高可用
- Nginx转发指向数据库端口并对外开放访问权限
- Python手写了 35 种可解释的特征工程方法
- Geant4--G4ParticleGun定义射线源的发射能谱
- Sony-PMCA-RE, 反向工程索尼PlayMemories相机应用
- 中标麒麟系统Your trial is EXPIRED and no VALID licens
- R初探
- 独家 | 在Python编程面试前需要学会的10个算法(附代码)
- 为什么一个还没毕业的大学生能够把 IO 讲的这么好?
- 如何将单 master 升级为多 master 集群