• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 談談如何才能保證測試代碼的正確性

    發表于:2008-06-10來源:作者:點擊數: 標簽:代碼正確性
    關鍵字:測試代碼 正確性 本文僅就 單元測試 而論,雖然是說的測試,但目的是驅動開發,不過也不是談 測試驅動開發 ,更象是對測試驅動開發時TEST FIRST這個過程中如何保證測試代碼的正確性的理解和想法,當然有一些,我認為是通用的,不管是不是測試優先。而
    關鍵字:測試代碼 正確性

     本文僅就單元測試而論,雖然是說的測試,但目的是驅動開發,不過也不是談測試驅動開發,更象是對測試驅動開發時TEST FIRST這個過程中如何保證測試代碼的正確性的理解和想法,當然有一些,我認為是通用的,不管是不是測試優先。而我目前接觸最多的還是JAVA的單元測試,所以談的東西還是以JAVA為主,舉的例子都是和JAVA有關的。

      另外前些天看到一個帖子有人問這樣的問題,想到當初自己剛接觸JUNIT單元測試時也有類似的困惑,現在有了一些經驗,所以寫下來,既是對自己經驗的總結,也是希望能有人相互討論提高。

      首先是我認為要做到測試代碼的正確性的幾個要點:

      一、TEST FIRST

      二、只寫出需求測試(注意,是目標代碼需求,這個代碼的用戶當然是自己了,^_^)

      三、不要為了測試而測試(這句話是和一個朋友聊天時他說是他和Kent Back交流時Kent Back提醒他的,這里我也不是很確定對這句話的理解的正確與否,因為理解一句話,上下文也是關鍵的,而我并不很了解我朋友同Kent Back談話的具體內容和過程,不過這里還是作為一個要點談談自己的想法)

      四、每次寫一點(原子級)測試

      五、Clean code that works,(當然包括測試代碼啦,^_^)

      六、對于一個應用框架,最好是針對這個框架先寫一個測試框架(這其實是一個很具體的內容,不過現在JAVA在WEB方面用得很多,測試相對來說也比較難些,所以有這點)

      七、時刻提醒自己TEST FIRST的目的。(我們的目的是驅動開發,而不是為了測試,呵呵,這點是前面第一點和第二點和起來一樣,之所以還要單獨列,只是再次提醒,所以這一點我后面不作詳細闡述)

      八、偷懶是程序員的通病,但是小偷懶就別了。(我有這樣的觀點:程序員的水平高低,其實從他偷懶的程度上是可以看出來的……^_^)


      在開始具體來說上述要點之前,我想先寫個例子,只是覺得應該寫個例子,^_^,我的文采實在不是很好的,所以憑感覺的。

      一個例子:

      我有一個專門用于將數據庫操作結果集(ResultSet)解析成一個DOM的Document對象的類,這個類可以根據給定一個XML配置模板中的一個定義節點(declare節點)的子節點(column節點)集合來解析ResultSet生成Document對象,其中每個column節點都定義了要從ResultSet中獲取的某一個字段的屬性,包括字段名、該字段在展示是是否可修改(editable)、是否有格式化模式屬性(pattern)用于格式化該字段的數據等等;為了做得更通用,也可以依據ResultSet返回的ResultSetMetaData對象來生成column節點,再由column節點獲取數據體,當然這樣做有很大的局限性,比如該column節點的pattern、editable等等屬性的設置都不會太靈活。這個設計,其最大的靈活性被放在XML配置模板上,由模板的定義獲取數據,并且定義了數據的展示屬性,而一旦column節點是根據給定的ResultSet來自動生成時,靈活性大大折扣,雖然在大多數應用中,都不會使用由ResultSet來自動生成,但是如果一開始并不能確定定義列時卻是必須這樣做,特別是在ResultSet輸出的字段數量是變化的時候。問題終于出來了,最近有一個應用就是這樣,首先是必須要使用從ResultSet獲取定義節點(column),然后,在完成了所有的代碼后,發現給定ResultSet中都存在冗余字段,這個時候,沒辦法,只能是修改程序來適應它了。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>