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; ????? } |
?
實例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
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Assert(断言) 的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 子串判断
- 下一篇: jQuery插件开发的两种方法及$.fn