單元測(cè)試是我們?cè)谲浖_(kāi)發(fā)過(guò)程中經(jīng)常用到的一種軟件測(cè)試的方法,而今天我們就一起來(lái)了解一下,一個(gè)好的單元測(cè)試都是如何來(lái)編輯完成的。
創(chuàng)新互聯(lián)從2013年創(chuàng)立,先為方山等服務(wù)建站,方山等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為方山企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
1.使用框架來(lái)用于單元測(cè)試
Java提供了若干用于單元測(cè)試的框架。TestNG和JUnit是流行的測(cè)試框架。JUnit和TestNG的一些重要功能:
易于設(shè)置和運(yùn)行。
支持注釋。
允許忽略或分組并一起執(zhí)行某些測(cè)試。
支持參數(shù)化測(cè)試,即通過(guò)在運(yùn)行時(shí)指定不同的值來(lái)運(yùn)行單元測(cè)試。
通過(guò)與構(gòu)建工具,如Ant,Maven和Gradle集成來(lái)支持自動(dòng)化的測(cè)試執(zhí)行。
EasyMock是一個(gè)模擬框架,是單元測(cè)試框架,如JUnit和TestNG的補(bǔ)充。EasyMock本身不是一個(gè)完整的框架。它只是添加了創(chuàng)建模擬對(duì)象以便于測(cè)試的能力。例如,我們想要測(cè)試的一個(gè)方法可以調(diào)用從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)的DAO類。在這種情況下,EasyMock可用于創(chuàng)建返回硬編碼數(shù)據(jù)的MockDAO。這使我們能夠輕松地測(cè)試我們意向的方法,而不必?fù)?dān)心數(shù)據(jù)庫(kù)訪問(wèn)。
2.謹(jǐn)慎使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)!
測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)是一個(gè)軟件開(kāi)發(fā)過(guò)程,在這過(guò)程中,在開(kāi)始任何編碼之前,我們基于需求來(lái)編寫(xiě)測(cè)試。由于還沒(méi)有編碼,測(cè)試初會(huì)失敗。然后寫(xiě)入小量的代碼以通過(guò)測(cè)試。然后重構(gòu)代碼,直到被優(yōu)化。
目標(biāo)是編寫(xiě)覆蓋所有需求的測(cè)試,而不是一開(kāi)始就寫(xiě)代碼,卻可能甚至都不能滿足需求。TDD是偉大的,因?yàn)樗鼘?dǎo)致簡(jiǎn)單的模塊化代碼,且易于維護(hù)??傮w開(kāi)發(fā)速度加快,容易發(fā)現(xiàn)缺陷。此外,單元測(cè)試被創(chuàng)建作為T(mén)DD方法的副產(chǎn)品。
然而,TDD可能不適合所有的情況。在設(shè)計(jì)復(fù)雜的項(xiàng)目中,專注于簡(jiǎn)單的設(shè)計(jì)以便于通過(guò)測(cè)試用例,而不提前思考可能會(huì)導(dǎo)致巨大的代碼更改。此外,TDD方法難以用于與遺留系統(tǒng),GUI應(yīng)用程序或與數(shù)據(jù)庫(kù)一起工作的應(yīng)用程序交互的系統(tǒng)。另外,測(cè)試需要隨著代碼的改變而更新。
因此,在決定采用TDD方法之前,應(yīng)考慮上述因素,并應(yīng)根據(jù)項(xiàng)目的性質(zhì)采取措施。
3.測(cè)量代碼覆蓋率
代碼覆蓋率衡量(以百分比表示)了在運(yùn)行單元測(cè)試時(shí)執(zhí)行的代碼量。通常,高覆蓋率的代碼包含未檢測(cè)到的錯(cuò)誤的幾率要低,因?yàn)槠涓嗟脑创a在測(cè)試過(guò)程中被執(zhí)行。云南電腦培訓(xùn)發(fā)現(xiàn)測(cè)量代碼覆蓋率的一些佳做法包括:
使用代碼覆蓋工具,如Clover,Corbetura,JaCoCo或Sonar。使用工具可以提高測(cè)試質(zhì)量,因?yàn)檫@些工具可以指出未經(jīng)測(cè)試的代碼區(qū)域,讓你能夠開(kāi)發(fā)開(kāi)發(fā)額外的測(cè)試來(lái)覆蓋這些領(lǐng)域。
怎么判斷代碼是否是優(yōu)質(zhì)量的代碼呢?下面重慶電腦培訓(xùn)來(lái)簡(jiǎn)單對(duì)代碼質(zhì)量的問(wèn)題進(jìn)行一個(gè)介紹。
代碼質(zhì)量所涉及的5個(gè)方面,編碼標(biāo)準(zhǔn)、代碼重復(fù)、代碼覆蓋率、依賴項(xiàng)分析、復(fù)雜度分析。
我們分別來(lái)看一下這5方面:編碼標(biāo)準(zhǔn):一般來(lái)說(shuō),公司都會(huì)有一份編碼規(guī)范,類命名、包命名、代碼風(fēng)格之類的都會(huì)有所要求。
代碼重復(fù):顧名思義就是重復(fù)的代碼,如果代碼中有大量的重復(fù)代碼,就要考慮是否將重復(fù)的代碼提取出來(lái),封裝成一個(gè)公共的方法或者組件。
代碼覆蓋率:測(cè)試代碼能運(yùn)行到的代碼比率,代碼經(jīng)過(guò)了單元測(cè)試了嗎?是不是每個(gè)方法都進(jìn)行了測(cè)試,代碼覆蓋率是多少?這關(guān)系到代碼的功能性和穩(wěn)定性。
依賴項(xiàng)分析:代碼依賴關(guān)系怎么樣?耦合關(guān)系怎么樣?是否有循環(huán)依賴?是否符合高內(nèi)聚低耦合的原則?復(fù)雜度分析:如果代碼中嵌套了很多層的ifelse,就會(huì)讓人很難閱讀。
要相信越優(yōu)秀的代碼,越容易讀懂。
測(cè)試覆蓋率和代碼覆蓋率是衡量代碼有效性的最流行方法。這些術(shù)語(yǔ)有時(shí)會(huì)同時(shí)出現(xiàn),因?yàn)樗鼈兊幕驹硐嗤?。但是它們并不是那么一致。很多時(shí)候,測(cè)試團(tuán)隊(duì)和開(kāi)發(fā)團(tuán)隊(duì)對(duì)這兩個(gè)術(shù)語(yǔ)的使用感到困惑。下面詳細(xì)討論代碼覆蓋率和測(cè)試覆蓋率之間的區(qū)別的原因。
代碼覆蓋率:表示通過(guò)用Selenium或任何其他測(cè)試自動(dòng)化框架進(jìn)行的手動(dòng)測(cè)試和自動(dòng)化測(cè)試,測(cè)試用例覆蓋的代碼百分比。例如,如果源代碼具有一個(gè)簡(jiǎn)單的if...else循環(huán),則如果測(cè)試代碼可以覆蓋這兩種情況(即if&else),則代碼覆蓋率將為100%。
測(cè)試范圍:包括測(cè)試作為功能需求規(guī)范,軟件需求規(guī)范和其他必需文檔的一部分而實(shí)現(xiàn)的功能。例如,如果要對(duì)Web應(yīng)用程序執(zhí)行跨瀏覽器測(cè)試,以確保應(yīng)用程序可以在其他瀏覽器流暢運(yùn)行。測(cè)試覆蓋范圍是已驗(yàn)證Web應(yīng)用程序的瀏覽器兼容性的瀏覽器+操作系統(tǒng)組合的數(shù)量。
開(kāi)發(fā)人員在單元測(cè)試期間執(zhí)行代碼覆蓋,以驗(yàn)證代碼實(shí)現(xiàn),盡可能多執(zhí)行代碼語(yǔ)句。大多數(shù)代碼覆蓋率工具都使用靜態(tài)工具,將監(jiān)視執(zhí)行的語(yǔ)句插入代碼中的必要位置。盡管添加檢測(cè)代碼會(huì)導(dǎo)致總體應(yīng)用程序大小和執(zhí)行時(shí)間增加,但與通過(guò)執(zhí)行檢測(cè)代碼生成的信息相比,開(kāi)銷卻很小。輸出包含一個(gè)詳細(xì)描述測(cè)試套件測(cè)試范圍的報(bào)告。
單元測(cè)試主要用于在單個(gè)單元級(jí)別上測(cè)試代碼。由于單元測(cè)試是由開(kāi)發(fā)人員自己編寫(xiě)的,因此他對(duì)應(yīng)該作為單元測(cè)試的一部分包含的測(cè)試具有更好的可見(jiàn)性。單元測(cè)試有助于提高軟件的整體質(zhì)量,但是關(guān)于構(gòu)成單元測(cè)試的測(cè)試數(shù)量始終存在疑問(wèn)。測(cè)試套件中是否有足夠數(shù)量的測(cè)試方案?我們應(yīng)該添加更多測(cè)試嗎?代碼覆蓋率是所有這些問(wèn)題的重要衡量標(biāo)準(zhǔn)。
隨著產(chǎn)品開(kāi)發(fā)的進(jìn)行,新功能以及BUG修復(fù)補(bǔ)丁將添加到發(fā)布周期中。這意味著測(cè)試代碼可能還需要進(jìn)行更改,以使其與開(kāi)發(fā)過(guò)程中所做的軟件更改保持一致。在項(xiàng)目開(kāi)始時(shí)設(shè)定的測(cè)試標(biāo)準(zhǔn)必須與后續(xù)的發(fā)布周期保持一致,這一點(diǎn)很重要。代碼覆蓋率可用于確保測(cè)試過(guò)程符合這些標(biāo)準(zhǔn),并且質(zhì)量最好的代碼進(jìn)入生產(chǎn)階段。
代碼覆蓋率越高,發(fā)生未檢測(cè)到的錯(cuò)誤的概率越低。在某些組織中,質(zhì)量團(tuán)隊(duì)設(shè)置在將軟件推向生產(chǎn)階段之前需要實(shí)現(xiàn)的最小代碼覆蓋量。這樣做的主要原因是為了減少在產(chǎn)品開(kāi)發(fā)的后期階段檢測(cè)到錯(cuò)誤的可能性。
代碼覆蓋范圍有不同的級(jí)別,代碼覆蓋率的一些常見(jiàn)的類型為:
為了檢查代碼覆蓋率,使用了一種稱為檢測(cè)的方法。工具可用于監(jiān)視性能,插入跟蹤信息以及診斷源代碼中的任何類型的錯(cuò)誤。
儀器分為三種主要類型
根據(jù)測(cè)試要求,團(tuán)隊(duì)?wèi)?yīng)該選擇正確的代碼覆蓋率工具以及該工具支持的最佳檢測(cè)方法。
有許多支持不同編程語(yǔ)言的代碼覆蓋工具,其中許多還可以兼用作QA工具。許多工具可以與構(gòu)建工具和項(xiàng)目管理工具集成在一起,從而使它們更加強(qiáng)大的作用。選擇開(kāi)源代碼覆蓋率工具時(shí),應(yīng)檢查該工具支持的功能以及該工具是否正在積極開(kāi)發(fā)迭代中。下面是一些流行的開(kāi)源代碼覆蓋工具:
與代碼覆蓋率是白盒測(cè)試方法不同,測(cè)試覆蓋率是黑盒測(cè)試方法。以最大范圍覆蓋FRS(功能需求規(guī)范),SRS(軟件需求規(guī)范),URS(用戶需求規(guī)范)等中提到的需求的方式編寫(xiě)測(cè)試用例。
像代碼覆蓋率一樣,也可以通過(guò)不同類型的測(cè)試來(lái)評(píng)估測(cè)試覆蓋率。但是,應(yīng)遵循哪種測(cè)試完全取決于具體的業(yè)務(wù)。例如在以用戶為中心的Web應(yīng)用程序中,可能存在UI/UX測(cè)試比功能測(cè)試具有更高優(yōu)先級(jí)的情況,而在其他類型的應(yīng)用程序中(例如銀行,金融);可用性測(cè)試,安全性測(cè)試等可能更為重要。
以下是一些測(cè)試覆蓋率機(jī)制:
要注意的另一個(gè)重要點(diǎn)是,測(cè)試覆蓋范圍的目的和含義可能會(huì)有所不同,具體取決于執(zhí)行測(cè)試的級(jí)別。它還取決于執(zhí)行黑盒測(cè)試的產(chǎn)品類型。用于測(cè)試手機(jī)的測(cè)試覆蓋率指標(biāo)將不同于用于網(wǎng)站測(cè)試的指標(biāo)。一些分類如下:
在代碼覆蓋率的情況下,度量標(biāo)準(zhǔn)是通過(guò)測(cè)試用例/測(cè)試套件測(cè)試的代碼的百分比。因此,可以量化測(cè)試結(jié)果,即在100 LOC(代碼行)中,代碼覆蓋率為80行。這意味著代碼覆蓋率為80%。由于執(zhí)行測(cè)試是為了驗(yàn)證功能要求,因此無(wú)法量化測(cè)試覆蓋率的結(jié)果。還可以提出可以在單個(gè)測(cè)試中測(cè)試多個(gè)需求的黑匣子測(cè)試。 盡管在少數(shù)情況下必須編寫(xiě)測(cè)試代碼來(lái)達(dá)到測(cè)試覆蓋率要求,但是在某些情況下,您可能仍需要使用一些流行的測(cè)試框架。兩種最受歡迎 的測(cè)試框架是:
衡量代碼覆蓋率和測(cè)試覆蓋率的影響的基礎(chǔ)完全不同。代碼覆蓋率是通過(guò)測(cè)試期間覆蓋的代碼百分比來(lái)衡量的,而測(cè)試覆蓋率是通過(guò)測(cè)試覆蓋的功能來(lái)衡量的。 重要的是“其中哪一項(xiàng)最適合項(xiàng)目”?這個(gè)問(wèn)題沒(méi)有確切的答案,因?yàn)榻鉀Q方案取決于項(xiàng)目的類型和復(fù)雜性。在大多數(shù)情況下,使用測(cè)試覆蓋率和代碼覆蓋率,因?yàn)樗鼈冊(cè)谲浖?xiàng)目中同等重要。
測(cè)試團(tuán)隊(duì)?wèi)?yīng)花費(fèi)大量時(shí)間來(lái)了解總體要求并確定測(cè)試活動(dòng)的優(yōu)先級(jí)。為了跟蹤進(jìn)度,他們應(yīng)該有一個(gè)清單,該清單應(yīng)定期更新(至少在每次發(fā)行之后)。測(cè)試團(tuán)隊(duì)還必須與質(zhì)量保證(QA)團(tuán)隊(duì)保持頻繁的溝通,這是很重要的,因?yàn)樗麄兙哂幸l(fā)布給客戶/客戶的產(chǎn)品/項(xiàng)目必須達(dá)到的目標(biāo)(測(cè)試/代碼)覆蓋范圍的詳細(xì)信息。沒(méi)有專門(mén)的經(jīng)驗(yàn)法則提到測(cè)試產(chǎn)品時(shí)需要達(dá)到的最小代碼覆蓋率或測(cè)試覆蓋率百分比。
追求覆蓋率只是手段而不是目的。測(cè)試同學(xué)的終極目的還是要在首先的資源情況下最大顯得保障產(chǎn)品質(zhì)量。不能因?yàn)镵PI就盲目追求手段的極致,反而本末倒置,最終陷入泥潭不能自拔。
在軟件開(kāi)發(fā)過(guò)程中,每個(gè)單元的運(yùn)行都是非常關(guān)鍵的,并且直接關(guān)系到后期程序員的運(yùn)行。那么在進(jìn)行軟件開(kāi)發(fā)過(guò)程中,經(jīng)常使用到的單元測(cè)試方法有哪些呢,一個(gè)好的單元測(cè)試是如何進(jìn)行實(shí)現(xiàn)的?下面云南電腦培訓(xùn)為大家介紹進(jìn)行Java單元測(cè)試的具體方法。
1、使用框架進(jìn)行單元測(cè)試
Java能夠提供單元測(cè)試方法的框架,在測(cè)試過(guò)程中,測(cè)試NG和JUnit是現(xiàn)在流行的測(cè)試框架。JUnit和TestNG框架測(cè)試有幾個(gè)重要功能:設(shè)置和運(yùn)行很容易;允許忽略或分組,并一起運(yùn)行多個(gè)測(cè)試;支持參數(shù)化測(cè)試,并且云南IT培訓(xùn)發(fā)現(xiàn)能夠通過(guò)在運(yùn)行時(shí)指定不同的值來(lái)執(zhí)行單元測(cè)試。
2、謹(jǐn)慎使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)
測(cè)試驅(qū)動(dòng)開(kāi)發(fā)是一個(gè)軟件開(kāi)發(fā)的過(guò)程。在整個(gè)開(kāi)發(fā)過(guò)程中,在開(kāi)始編碼的時(shí)候,應(yīng)該根據(jù)程序的需求進(jìn)行編程測(cè)試。但是昆明IT培訓(xùn)發(fā)現(xiàn)由于這個(gè)時(shí)候還沒(méi)有進(jìn)行編程,所以初次測(cè)試會(huì)面臨失敗,只需要寫(xiě)入少量的代碼就能通過(guò)測(cè)試,進(jìn)行重置代碼。
3、測(cè)試代碼的覆蓋率
代碼覆蓋率是以百分比測(cè)定執(zhí)行單元測(cè)試時(shí)進(jìn)行的代碼量。通常,高覆蓋率的代碼包含未被檢測(cè)出的錯(cuò)誤的概率較低,因?yàn)楦嗟脑创a在測(cè)試中被執(zhí)行。測(cè)試代碼覆蓋率的工具有:Clover,Corbetura,JaCoCo。使用工具測(cè)試能夠更好的提高測(cè)試質(zhì)量。
4、將測(cè)試數(shù)據(jù)外部?jī)?yōu)化
在JUnit4之前,測(cè)試用例執(zhí)行的數(shù)據(jù)必須被測(cè)試用例硬編碼,這會(huì)引起限制。為了使用不同的數(shù)據(jù)執(zhí)行測(cè)試,必須修正測(cè)試用例代碼。但是,昆明電腦培訓(xùn)認(rèn)為JUnit4以及TestNG支持外部化測(cè)試數(shù)據(jù),無(wú)需變更源代碼,就可以對(duì)不同的數(shù)據(jù)組執(zhí)行測(cè)試用例。