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


