zoukankan      html  css  js  c++  java
  • Assert 的用法

    Assert

    Assert是断言的意思,头文件为assert.h,

    assert是一个宏

    功 能: 测试一个条件并可能使程序终止

    用 法: void assert(int test);

    在单元测试中经常使用断言

    断言只有在Debug模式下才有效,它可以有两种形式

    1.assert Expression1

    2.assert Expression1:Expression2

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

    官方解释是:编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。

    通俗一点说:编写代码时,我们假设代码运行到某行时,某些变量的值应该是等于多少,如果不等于,说明程序逻辑不对,可能造成不稳定,

    比如,我之前定义了一个变量m ,在程序运行过程中m的值是会改变的,依照正确的思路,程序运行到100行时m的值应该是100,那么,我就在程序的第101行写上 assert(m=100);

    如果m==100,那么assert返回true,如果m!=100,那么assert会返回false,程序运行到这里就会出现断言错误,

    可见assert很大程度上辅助测试代码的,让代码更强壮更稳定

    用法验证:

    程序实例1:

    // 0001.cpp : Defines the entry point for the console application. 
    //
    
    #include "stdafx.h" 
    #include<assert.h> 
    #include<stdio.h> 
    #include<stdlib.h> 
    struct ITEM
    
    { 
        
        int key; 
        
        int value; 
        
    };
    
    void additem(struct ITEM* itemptr)
    
    { 
        
        assert(itemptr!=NULL); 
        
    }
    
    int main(int argc, char* argv[]) 
    { 
        additem(NULL); 
        
        return 0; 
        
    }
    

      

    image

    实例2:

    // 0001.cpp : Defines the entry point for the console application. 
    //
    
    #include "stdafx.h" 
    #include<stdio.h> 
    #include<assert.h> 
    #include<stdlib.h>
    
    
    int main(int argc, char* argv[]) 
    { 
    FILE* fp;
    
    fp=fopen("test.txt","w");//以可写的方式打开一个文件,如果不存在就创建一个同名文件
    
    assert(fp);//所以这里不会出错
    
    fclose(fp);
    
    fp=fopen("noexitfile.txt","r");//以只读的方式打开一个文件,如果不存在就打开文件失败
    
    assert(fp);//所以这里出错
    
    fclose(fp);//程序永远都执行不到这里来
    
        return 0; 
        
    }
    
     
    

      

    image

  • 相关阅读:
    结对第一次—疫情统计可视化(原型设计)
    寒假作业(2/2)
    寒假作业(1/2)
    android 全局悬浮窗的使用以及权限
    个人作业——软件工程实践总结&个人技术博客
    个人作业——软件评测
    结对第二次作业——某次疫情统计可视化的实现
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    蒟蒻博主又回来了
  • 原文地址:https://www.cnblogs.com/hhddcpp/p/4308602.html
Copyright © 2011-2022 走看看