• 面向对象编程之断言assert


    面向对象编程之断言assert

    还是熟悉的八股文

    断言(assertion)是一种在程序中的一阶逻辑(如:一个结果为真或假的逻辑判断式),目的为了表示与验证软件开发者预期的结果——当程序执行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止执行,并给出错误信息。

    编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设。程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。

    使用断言可以创建更稳定、品质更好且 不易于出错的代码。当需要在一个值为FALSE时中断当前操作的话,可以使用断言。单元测试必须使用断言(Junit/JunitX)。

    除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法。

    使用断言使我们向按契约式设计更近了一步。

    断言可以有两种形式

    1.assert Expression1

    2.assert Expression1:Expression2

    其中Expression1应该总是一个布尔值,Expression2是断言失败时输出的失败消息的字符串。如果Expression1为假,则抛出一个 AssertionError,这是一个错误,而不是一个异常,也就是说是一个不可控制异常(unchecked Exception),AssertionError由于是错误,所以可以不捕获,但不推荐这样做,因为那样会使你的系统进入不稳定状态。

    由于程序员的问题,断言的使用可能会带来副作用 ,例如:

    boolean isEnable=false;

    //...

    assert isEnable=true;

    这个断言的副作用是因为它修改了程序中变量的值并且未抛出错误,这样的错误如果不细心的检查是很难发现的。但是同时我们可以根据以上的副作用得到一个有用的特性,根据它来测试断言是否打开。

    直接上代码:(很简单就稍微写两段)

    1. '''
    2. assert:
    3. 用于判断代码是否符合执行预期!--也可以说是否符合逻辑!!
    4. 只有代码的执行结果为真才能正确执行!否则直接报错
    5. 问题1:assert到底有啥用?
    6. 答:1、主要用作单元测试,调用接口,结合assert做一个自动化脚本,自动的对每个接口都进行测试,测试接口返回的是否是符合预期的结果
    7. 2、当别人调用你的接口的时候,你的接口要求他调用时必须传递指定的关键参数,等他传递进来时,你就可以用assert语句判断他传递的参数是否符合预期
    8. '''
    9. d=[1,2,3]
    10. assert len(d)>3

    assert:
    用于判断代码是否符合执行预期!--也可以说是否符合逻辑!!
    只有代码的执行结果为真才能正确执行!否则直接报错

    问题1:assert到底有啥用?
    答:1、主要用作单元测试,调用接口,结合assert做一个自动化脚本,自动的对每个接口都进行测试,测试接口返回的是否是符合预期的结果
    2、当别人调用你的接口的时候,你的接口要求他调用时必须传递指定的关键参数,等他传递进来时,你就可以用assert语句判断他传递的参数是否符合预期

    断言语句不是永远会执行,可以屏蔽也可以启用

    因此:

    1.不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行

    2.断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法的返回值

  • 相关阅读:
    前端js实现protobuf序列化与反序列化
    四川农业大学就业指南←缺失的就业指导课
    [PAT练级笔记] 28 Basic Level 1028 人口普查
    金仓数据库KingbaseES安全指南--6.1. 强身份验证简介
    Gap Year Plan
    大数据技术学习笔记(二)—— Hadoop 运行环境的搭建
    1.Vue-在独立页面实现Vue的增删改查
    游戏工作时d3dcompiler_47.dll缺失怎么修复?5种修复方法分享
    can中继 智能CAN总线隔离中继器集线器CANBridge-300/400
    【JavaEE】Servlet API 详解(HttpServletResponse类方法演示、实现自动刷新、实现自动重定向)
  • 原文地址:https://blog.csdn.net/qq_46044325/article/details/127113307