博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Assert(断言) 的用法
阅读量:6068 次
发布时间:2019-06-20

本文共 1784 字,大约阅读时间需要 5 分钟。

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 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;
     
}

  

 

实例2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 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;
     
}

  

 

转载于:https://www.cnblogs.com/writeLessDoMore/p/6732522.html

你可能感兴趣的文章
linux tmpfs与/dev/shm探讨及其应用
查看>>
打造高质效的技术团队 —— 酝酿篇
查看>>
Lync Server 2013标准版升级Skype for Business Server 2015实战(下)
查看>>
数据库方言
查看>>
你们可能都小看了Windows!
查看>>
wps文件批量转换到 microsoft office平台 软件
查看>>
WPF-008:使用PageFunction导航不能使用带参构造和线程导航
查看>>
90后美女的全能测试蜕变之路
查看>>
Oracle Fusion Middleware 12c GoldenGate Studio Installation
查看>>
用Squid实现反向代理
查看>>
微博一键分享主要通过对指定 URL 添加各种参数来实现
查看>>
跨运营商MPLS *** ---背靠背
查看>>
帝国时代 你爱它说明老了
查看>>
精通MVC3摘译(4)-使用Area
查看>>
音视频开发:码率、延时、花屏、卡顿
查看>>
linux命令小结
查看>>
SQL Server 2012 开发新特性:文件表
查看>>
Configuring Adaptive Server Sybase Central Plug-in
查看>>
最新活動說明
查看>>
Linux出现Read-only file system
查看>>