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

原文地址:https://www.cnblogs.com/hhddcpp/p/4308602.html