<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-124  評論-194  文章-0  trackbacks-0

    ASSERT是在調(diào)試與測試環(huán)境,讓程序員和測試者及時發(fā)現(xiàn)運行時錯誤的極簡極佳之方法。

    其語法如下:

    在語法上,為了支持assertion,Java增加了一個關鍵字assert。它包括兩種表達式,分別如下:

    1. assert expression1;
    2. assert expression1: expression2;

    在兩種表達式中,expression1表示一個boolean表達式,expression2表示一個基本類型或者是一個對象(Object) ,基本類型包括boolean,char,double,float,int和long。由于所有類都為Object的子類,因此這個參數(shù)可以用于所有對象。

    在運行時,如果關閉了assertion功能,這些語句將不起任何作用。如果打開了assertion功能,那么expression1的值將被計算,如果它的值為false,該語句強拋出一個AssertionError對象。如果assertion語句包括expression2參數(shù),程序將計算出 expression2的結果,然后將這個結果作為AssertionError的構造函數(shù)的參數(shù),來創(chuàng)建AssertionError對象,并拋出該對象;如果expression1值為true,expression2將不被計算。

    詳盡說明(點這里)。

    它的語法因為簡單所以美麗。

    注意它絕對不應用于發(fā)布和用戶使用環(huán)境,ASSERT就像蓋房子時的綠罩子、絞手架,在施工期間,防止石塊跌落,同時也有協(xié)助施工的作用。

    JAVA源自C++,后者中被大力推廣的ASSERT,在JAVA里應該有十分的存在理由。ASSERT更象是一種編程方法和習慣,而不應該受到語言的局限。

    做為JAVA程序員,應該非常慶幸:C++的ASSERT幾乎就真是一句“斷言”,單憑它,你只能知道錯了,而不知錯在何處。要在實際項目中使用它,幾乎都要用宏去重新定義,讓它帶有更多的調(diào)試信息,甚至是堆棧信息,做到這點還是需要些技巧的。而JAVA的ASSERT天生語法就可帶有可讀信息,并且自動拋出異常,我們可以方便看到堆棧。

    有的文章攻擊ASSERT(點這里),是混淆了其使用目的的結果。

    現(xiàn)在的IDE及WEB調(diào)試環(huán)境都可以方便的控制VM參數(shù),雖然JAVA可以選擇在發(fā)布版本也使用ASSERT,但JAVA本身也和C++一樣遵循默認不開啟它。你只需要在調(diào)試和測試的時候加上-ea(enable assertion)即可。

    UNIT TEST并不能替代ASSERT。ASSERT是在真真正正實在的運行中產(chǎn)生作用,不同于單元測試中的MOCK框架或者函數(shù)級別的“驗證”測試。它著重于在整個系統(tǒng)運行時就將錯誤揪出來,試問單元測試能做到模擬整套系統(tǒng)運行嗎?

    總之,ASSERT是前人多年編程過程中積累的工具和經(jīng)驗,我們應該多用它。以幾條摘自《高質(zhì)量C/C++編程指南》使用規(guī)則結束本文:

    【規(guī)則6-5-1】使用斷言捕捉不應該發(fā)生的非法情況。不要混淆非法情況與錯誤情況之間的區(qū)別,后者是必然存在的并且是一定要作出處理的。
    【規(guī)則6-5-2】在函數(shù)的入口處,使用斷言檢查參數(shù)的有效性(合法性)。
    【建議6-5-1】在編寫函數(shù)時,要進行反復的考查,并且自問:“我打算做哪些假定?”一旦確定了的假定,就要使用斷言對假定進行檢查。
    【建議6-5-2】一般教科書都鼓勵程序員們進行防錯設計,但要記住這種編程風格可能會隱瞞錯誤。當進行防錯設計時,如果“不可能發(fā)生”的事情的確發(fā)生了,則要使用斷言進行報警。

    posted on 2008-05-30 11:54 我愛佳娃 閱讀(2082) 評論(3)  編輯  收藏 所屬分類: JAVA基礎

    評論:
    # re: 被程序員和測試員遺忘的好朋友--ASSERT 2008-05-30 14:42 | Edward's
    我覺得測試和代碼還是應該分開  回復  更多評論
      
    # re: 被程序員和測試員遺忘的好朋友--ASSERT 2008-05-30 15:57 | 我愛佳娃
    ASSERT只是一種斷言不可能的情況,應該不算是真正的測試,只是能夠在運行時及時提供信息給程序員和測試員的工具。它和UT并不沖突,適用場合不同。  回復  更多評論
      
    # re: 被程序員和測試員遺忘的好朋友--ASSERT 2008-05-30 18:44 | python
    assert語句在代碼中主要用于代碼調(diào)試吧?Java中測試可以用Junit等工具  回復  更多評論
      
    主站蜘蛛池模板: 毛片免费观看的视频| 亚洲免费中文字幕| 国产无遮挡色视频免费视频| 一级毛片免费视频| 中文字幕免费观看全部电影| 日韩国产欧美亚洲v片 | 未满十八私人高清免费影院| 亚洲色图激情文学| 久久夜色精品国产噜噜亚洲AV| 三上悠亚亚洲一区高清| 又黄又爽无遮挡免费视频| 毛片免费全部免费观看| h在线观看视频免费网站| 免费国产黄网站在线观看视频| 东北美女野外bbwbbw免费| 一个人看的免费高清视频日本| 亚洲AV无码成人网站在线观看| 亚洲午夜福利在线视频| 亚洲制服丝袜一区二区三区| 亚洲成aⅴ人在线观看| 亚洲美女人黄网成人女| 亚洲一区中文字幕久久| 亚洲视频.com| 亚洲香蕉免费有线视频| 亚洲欧洲日本精品| 亚洲剧场午夜在线观看| 国产精品亚洲自在线播放页码| 亚洲一卡2卡4卡5卡6卡残暴在线| 亚洲成a人片在线观看中文app | 3344免费播放观看视频| 最近2018中文字幕免费视频| 日韩精品久久久久久免费| 无码成A毛片免费| 91香焦国产线观看看免费| 亚洲视频免费在线看| 69式国产真人免费视频 | 亚洲综合精品伊人久久| 亚洲日韩精品A∨片无码加勒比| 亚洲国产精品无码中文lv| 美女视频黄a视频全免费网站一区| 猫咪免费观看人成网站在线|