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:

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;
     
}

  

 

image

實例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;
     
}

  

 

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM