使用JUnit高效完成功能測試 軟件測試
功能測試或集成測試是關(guān)系到整體系統功能的測試,而不只是牽涉到小段代碼(單元)。這需要將已經(jīng)單獨測試好的模塊組裝起來(lái),以保證其連接時(shí)也能像預期一樣正常工作。JUnit是進(jìn)行Java程序測試最常用的測試框架。
大多數Java開(kāi)發(fā)人員都善于解決邏輯結構測試問(wèn)題,比如如何建立測試預設環(huán)境、利用斷言?添加測試方法、用setup方法進(jìn)行初始化等。然而,如果Java開(kāi)發(fā)人員能更深入地了解如何設計功能測試集來(lái)有效地檢驗代碼是否正常運行,他們將獲得更多的益處。
這篇文章介紹了可以建立有效 JUnit功能測試集的策略。包括:
確定測試用例覆蓋所有程序行為。
確定代碼入口點(diǎn):測試程序整體功能的主要代碼段。
匹配入口點(diǎn)與相應的測試用例。
根據初始化 /運行/檢查流程創(chuàng )建測試用例。
設計并利用運行時(shí)事件表進(jìn)行測試。
我將結合Saxon(一個(gè)可以處理XPath、XQuery和XSLT 的XML工具)的源代碼來(lái)具體闡述這些策略。Saxon由約50000行Java代碼組成,它是開(kāi)源的,代碼風(fēng)格優(yōu)良,注釋文檔詳盡。
確定用例
功能測試有兩個(gè)相輔的目標:覆蓋率與粒度。為確保完整性,功能測試必須覆蓋程序提供的所有功能,且必須在各組件水平上分別進(jìn)行測試。一個(gè)測試可以建立在另一個(gè)測試的基礎上,但任何測試都不能用來(lái)驗證兩項功能。
建立一個(gè)全面的功能測試集,第一步是列出程序可以實(shí)現的所有行為。這可以通過(guò)使用特定的用例模擬外部因素(程序使用者或其它軟組件)執行系統內部的功能來(lái)實(shí)現。
一個(gè)典型的企業(yè)Java程序應該包含各種用戶(hù)所需的詳細文檔,包括用例說(shuō)明、非功能性要求、測試用例說(shuō)明、用戶(hù)界面設計文檔、模型、用戶(hù)個(gè)人信息以及其它各種人工生成的信息。一般來(lái)說(shuō)簡(jiǎn)單的應用程序只有一個(gè)簡(jiǎn)單的說(shuō)明文檔。
借助這些文檔,你可以快速確定需要測試的用例。每個(gè)測試用例都描述了應用程序可以執行的一項功能。用規模相近的測試方案確定唯一的功能是一個(gè)好習慣,而較大的方案可以根據其檢驗的功能拆分為較小的方案。
有許多種建立用例模型的方法,其中最簡(jiǎn)單的便是輸入/輸出匹配法。在Saxon的query類(lèi)中,最簡(jiǎn)單的用例是傳送一個(gè)查詢(xún)文件、一個(gè)查詢(xún)請求和一個(gè)輸出文件路徑。輸出文件若不存在,將根據要求創(chuàng )建,并在文件中顯示查詢(xún)結果。
更復雜的用例可能需要輸入更多的信息或輸出更多的結果。然而,用例并不關(guān)心功能是如何在內部實(shí)現的。對它們來(lái)說(shuō),軟件就像是一個(gè) “黑盒子”,只要運行正常,即使真正實(shí)現軟件功能的是盒子里的侏儒也無(wú)所謂。這是很重要的一點(diǎn),因為輸入/輸出匹配用例很容易直接轉換為測試用例,使得復雜的說(shuō)明與簡(jiǎn)單的測試吻合,確定該運行的功能正常運行,而不該運行的功能如預期一樣失效。
如果類(lèi)相對比較簡(jiǎn)單,或者已有列舉類(lèi)所有功能的說(shuō)明文檔,為指定入口點(diǎn)描述用例將很容易。如果不是這樣,或許就需要研究類(lèi)可能有的所有行為(確定類(lèi)的目的與用法)。如果你想知道所有調用代碼的地方,也可以從代碼中提取用例。
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/