原創(chuàng)|使用教程|編輯:鄭恭琳|2020-12-01 15:51:02.243|閱讀 260 次
概述:單元測試是測試軟件的單個單元/組件的最佳實踐,但是對于Java開發(fā)人員而言,這可能既乏味又昂貴。很難通過人工斷言來測試每個單元的正確行為,并通過模擬來隔離每個方法,并且單元測試本身容易受到錯誤和誤解的影響。為了改善這種情況,您可以使用運行時分析工具來檢測數(shù)據(jù)和控制流,外部依存關(guān)系,并計算測試代碼覆蓋率。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
為了實現(xiàn)單元測試的好處,您可以在運行期間通過運行時分析觀察單元測試。單元測試執(zhí)行期間的運行時分析對于提高測試效率和有效性至關(guān)重要。
單元測試是測試軟件的單個單元/組件的最佳實踐,但是對于Java開發(fā)人員而言,這可能既乏味又昂貴。很難通過人工斷言來測試每個單元的正確行為,并通過模擬來隔離每個方法,并且單元測試本身容易受到錯誤和誤解的影響。為了改善這種情況,您可以使用運行時分析工具來檢測數(shù)據(jù)和控制流,外部依存關(guān)系,并計算測試代碼覆蓋率。
借助從運行時分析中收集到的數(shù)據(jù),諸如Parasoft Jtest之類的企業(yè)級解決方案可以通過自動推薦正確行為的斷言以及模擬方法來改善測試隔離性,從而提示開發(fā)人員如何改進測試。自動單元測試生成和運行時分析之間的這種集成減少了Java單元測試所需的手動干預。
單元測試是一種眾所周知的做法,但是其實現(xiàn)需要在許多項目中進行改進。單元測試做得很好,提高了敏捷過程的敏捷性,提高了質(zhì)量和安全性,并節(jié)省了長期成本。
不幸的是,盡管希望獲得更好的結(jié)果,但是盡管有這些好處,開發(fā)人員仍然無法在單元測試中掙扎。測試創(chuàng)建和維護所需的時間和精力可能太多,無法證明增加測試工作是合理的。通常,測試套件很脆弱,因為單元/對象與依賴項之間的隔離性較差。正確地模擬依賴關(guān)系,就像創(chuàng)建確定正確程序邏輯所需的斷言一樣,成為軟件測試人員的禍根。即使對方案進行參數(shù)化測試也可能是乏味且耗時的。
如果軟件開發(fā)團隊希望獲得徹底的單元測試的好處,則必須通過創(chuàng)建,隔離和維護測試來解決這些問題。答案從測試自動化工具開始,但僅自動化測試執(zhí)行并收集結(jié)果是不夠的。運行時分析是觀察運行的可執(zhí)行文件并記錄關(guān)鍵指標的過程,是一種創(chuàng)新的方法,可以幫助改善單元測試的創(chuàng)建、模擬和測試穩(wěn)定性。
在大多數(shù)情況下,開發(fā)人員并不認為運行時分析在單元測試的早期階段很重要。大多數(shù)工具用于捕獲單元測試遺漏的錯誤,或者僅用于計算代碼覆蓋率。但是,盡管這些好處很重要,但是運行時分析還可以觀察單元測試的第一次迭代的執(zhí)行情況,以提出改進測試的建議,并檢測干擾測試穩(wěn)定性的測試運行時環(huán)境的更改。
JUnit之類的測試框架會創(chuàng)建稀疏代碼,需要開發(fā)人員進一步輸入。這項工作很繁瑣,因此可以根據(jù)觀察到的程序邏輯自動填充更多細節(jié)。例如,Parasoft Jtest可以自動生成以下單元測試:
同樣,對于帶有參數(shù)化輸入的單元測試,如下所示:
由于創(chuàng)建的測試從一開始就是可執(zhí)行的,因此可以通過運行時分析來觀察它們的結(jié)果和執(zhí)行流程。例如,測試可能由于引發(fā)異常而失敗,如下所示。
此外,運行時工具會觀察到依賴關(guān)系的執(zhí)行路徑,并建議可能的模擬,以增加測試的隔離度。盡管目視檢查被測對象會發(fā)現(xiàn)其依賴關(guān)系,但是自動檢測和模擬這些依賴關(guān)系可以節(jié)省許多繁瑣且容易出錯的工作。
在下面的示例中,Parasoft Jtest根據(jù)單元測試的執(zhí)行軌跡為開發(fā)人員提供了模擬對象的選擇:
在這種情況下,添加可模擬方法模式會將方法添加到要由諸如PowerMock之類的模擬框架處理的模擬列表中。
如下所示,也可以模擬靜態(tài)構(gòu)造函數(shù)。
在充分了解執(zhí)行流程以及方法調(diào)用中使用的參數(shù)之后,可以使用運行時分析向開發(fā)人員提供有用的建議,以改進測試代碼。盡管提供了斷言,但靜態(tài)地,當創(chuàng)建測試時,它們可能未啟用或正確。在執(zhí)行測試時,失敗和遺漏的斷言會觸發(fā)警告,然后會提出建議以解決問題。
例如,在創(chuàng)建新測試之后,并且沒有對建議的斷言進行注釋,您將看到以下內(nèi)容:
或者,例如,如果斷言失敗,則顯示以下內(nèi)容:
無論發(fā)生什么情況,都是有關(guān)斷言的糾正措施的持續(xù)反饋,這會在創(chuàng)建測試以完成單元測試時關(guān)閉循環(huán)。另外,隨著被測設備的變化,這些變化可以以相同的方式處理,從而不斷減少了所需的手動測試維護。
運行時分析還可以檢測執(zhí)行期間測試環(huán)境中的變化,這些變化會影響為后續(xù)測試重新創(chuàng)建相同測試環(huán)境的能力。一次通過但以后失敗的測試可能是造成挫敗感,浪費時間和精力的主要原因。您可以使用運行時分析檢測到的不穩(wěn)定性示例包括:
至關(guān)重要的是,每個測試執(zhí)行都必須有相同的起點,以確保獲得可靠的結(jié)果。通過運行時檢測防止測試不穩(wěn)定,從而消除了測試調(diào)試階段的猜測。
因此,您可以看到運行時分析不僅用于計算代碼覆蓋率。測試執(zhí)行期間的運行時分析對于提高測試效率和有效性至關(guān)重要。監(jiān)視執(zhí)行路徑可提供有關(guān)依賴項的信息,以改善對依賴項和模擬的處理??梢员O(jiān)視斷言,自動建議可以幫助提高測試保真度。在運行時測試環(huán)境中檢測到影響測試穩(wěn)定性的更改,可以消除挫敗感并減少測試代碼的調(diào)試周期。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn