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