怎么進行單元測試?
有哪些方法可以進行Java單元測試
在軟件開發(fā)過程中,每個單元的運行都是非常關(guān)鍵的,并且直接關(guān)系到后期程序員的運行。那么在進行軟件開發(fā)過程中,經(jīng)常使用到的單元測試方法有哪些呢,一個好的單元測試是如何進行實現(xiàn)的?下面云南電腦培訓(xùn)為大家介紹進行Java單元測試的具體方法。
1、使用框架進行單元測試
Java能夠提供單元測試方法的框架,在測試過程中,測試NG和JUnit是現(xiàn)在流行的測試框架。JUnit和TestNG框架測試有幾個重要功能:設(shè)置和運行很容易;允許忽略或分組,并一起運行多個測試;支持參數(shù)化測試,并且云南IT培訓(xùn)發(fā)現(xiàn)能夠通過在運行時指定不同的值來執(zhí)行單元測試。
2、謹慎使用測試驅(qū)動開發(fā)
測試驅(qū)動開發(fā)是一個軟件開發(fā)的過程。在整個開發(fā)過程中,在開始編碼的時候,應(yīng)該根據(jù)程序的需求進行編程測試。但是昆明IT培訓(xùn)發(fā)現(xiàn)由于這個時候還沒有進行編程,所以初次測試會面臨失敗,只需要寫入少量的代碼就能通過測試,進行重置代碼。
3、測試代碼的覆蓋率
代碼覆蓋率是以百分比測定執(zhí)行單元測試時進行的代碼量。通常,高覆蓋率的代碼包含未被檢測出的錯誤的概率較低,因為更多的源代碼在測試中被執(zhí)行。測試代碼覆蓋率的工具有:Clover,Corbetura,JaCoCo。使用工具測試能夠更好的提高測試質(zhì)量。
4、將測試數(shù)據(jù)外部優(yōu)化
在JUnit4之前,測試用例執(zhí)行的數(shù)據(jù)必須被測試用例硬編碼,這會引起限制。為了使用不同的數(shù)據(jù)執(zhí)行測試,必須修正測試用例代碼。但是,昆明電腦培訓(xùn)認為JUnit4以及TestNG支持外部化測試數(shù)據(jù),無需變更源代碼,就可以對不同的數(shù)據(jù)組執(zhí)行測試用例。
五個方法讓你做更好的java單元測試?
單元測試是我們在軟件開發(fā)過程中經(jīng)常用到的一種軟件測試的方法,而今天我們就一起來了解一下,一個好的單元測試都是如何來編輯完成的。
1.使用框架來用于單元測試
Java提供了若干用于單元測試的框架。TestNG和JUnit是流行的測試框架。JUnit和TestNG的一些重要功能:
易于設(shè)置和運行。
支持注釋。
允許忽略或分組并一起執(zhí)行某些測試。
支持參數(shù)化測試,即通過在運行時指定不同的值來運行單元測試。
通過與構(gòu)建工具,如Ant,Maven和Gradle集成來支持自動化的測試執(zhí)行。
EasyMock是一個模擬框架,是單元測試框架,如JUnit和TestNG的補充。EasyMock本身不是一個完整的框架。它只是添加了創(chuàng)建模擬對象以便于測試的能力。例如,我們想要測試的一個方法可以調(diào)用從數(shù)據(jù)庫獲取數(shù)據(jù)的DAO類。在這種情況下,EasyMock可用于創(chuàng)建返回硬編碼數(shù)據(jù)的MockDAO。這使我們能夠輕松地測試我們意向的方法,而不必擔(dān)心數(shù)據(jù)庫訪問。
2.謹慎使用測試驅(qū)動開發(fā)!
測試驅(qū)動開發(fā)(TDD)是一個軟件開發(fā)過程,在這過程中,在開始任何編碼之前,我們基于需求來編寫測試。由于還沒有編碼,測試初會失敗。然后寫入小量的代碼以通過測試。然后重構(gòu)代碼,直到被優(yōu)化。
目標(biāo)是編寫覆蓋所有需求的測試,而不是一開始就寫代碼,卻可能甚至都不能滿足需求。TDD是偉大的,因為它導(dǎo)致簡單的模塊化代碼,且易于維護。總體開發(fā)速度加快,容易發(fā)現(xiàn)缺陷。此外,單元測試被創(chuàng)建作為TDD方法的副產(chǎn)品。
然而,TDD可能不適合所有的情況。在設(shè)計復(fù)雜的項目中,專注于簡單的設(shè)計以便于通過測試用例,而不提前思考可能會導(dǎo)致巨大的代碼更改。此外,TDD方法難以用于與遺留系統(tǒng),GUI應(yīng)用程序或與數(shù)據(jù)庫一起工作的應(yīng)用程序交互的系統(tǒng)。另外,測試需要隨著代碼的改變而更新。
因此,在決定采用TDD方法之前,應(yīng)考慮上述因素,并應(yīng)根據(jù)項目的性質(zhì)采取措施。
3.測量代碼覆蓋率
代碼覆蓋率衡量(以百分比表示)了在運行單元測試時執(zhí)行的代碼量。通常,高覆蓋率的代碼包含未檢測到的錯誤的幾率要低,因為其更多的源代碼在測試過程中被執(zhí)行。云南電腦培訓(xùn)http://www.kmbdqn.cn/發(fā)現(xiàn)測量代碼覆蓋率的一些佳做法包括:
使用代碼覆蓋工具,如Clover,Corbetura,JaCoCo或Sonar。使用工具可以提高測試質(zhì)量,因為這些工具可以指出未經(jīng)測試的代碼區(qū)域,讓你能夠開發(fā)開發(fā)額外的測試來覆蓋這些領(lǐng)域。
單元測試有哪些步驟?各個步驟有哪些實施內(nèi)容?
1、單元測試的步驟
通常單元測試在編碼階段進行。在源程序代碼編制完成,經(jīng)過評審和驗證,確認沒有語法錯誤之后,就開始進行單元測試的測試用例設(shè)計。利用設(shè)計文檔,設(shè)計可以驗證程序功能、找出程序錯誤的多個測試用例。對于每一組輸入,應(yīng)有預(yù)期的正確結(jié)果。
模塊并不是一個獨立的程序,在考慮測試模塊時,同時要考慮它和外界的聯(lián)系,用一些輔助模塊去模擬與被測模塊相聯(lián)系的其它模塊。這些輔助模塊分為兩種:
驅(qū)動模塊:相當(dāng)于被測模塊的主程序。它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測模塊,最后輸出實測結(jié)果。
樁模塊:用以代替被測模塊調(diào)用的子模塊。樁模塊可以做少量的數(shù)據(jù)操作,不需要把子模塊所有功能都帶進來,但不允許什么事情也不做。
被測模塊、與它相關(guān)的驅(qū)動模塊及樁模塊共同構(gòu)成了一個“測試環(huán)境”。
2、單元測試的內(nèi)容
模塊接口測試:對通過被測模塊的數(shù)據(jù)流進行測試。為此,對模塊接口,包括參數(shù)表、調(diào)用子模塊的參數(shù)、全程數(shù)據(jù)、文件輸入/輸出操作都必須檢查。
局部數(shù)據(jù)結(jié)構(gòu)測試:設(shè)計測試用例檢查數(shù)據(jù)類型說明、初始化、缺省值等方面的問題,還要查清全程數(shù)據(jù)對模塊的影響。
路徑測試:選擇適當(dāng)?shù)臏y試用例,對模塊中重要的執(zhí)行路徑進行測試。對基本執(zhí)行路徑和循環(huán)進行測試可以發(fā)現(xiàn)大量路徑錯誤。
錯誤處理測試:檢查模塊的錯誤處理功能是否包含有錯誤或缺陷。例如,是否拒絕不合理的輸入;出錯的描述是否難以理解、是否對錯誤定位有誤、是否出錯原因報告有誤、是否對錯誤條件的處理不正確;在對錯誤處理之前錯誤條件是否已經(jīng)引起系統(tǒng)的干預(yù)等。
邊界測試:要特別注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時出錯的可能性。對這些地方要仔細地選擇測試用例,認真加以測試。
此外,如果對模塊運行時間有要求的話,還要專門進行關(guān)鍵路徑測試,以確定最壞情況下和平均意義下影響模塊運行時間的因素。這類信息對進行性能評價是十分有用的。
擴展資料:
單元測試的優(yōu)點:
1、它是一種驗證行為。
程序中的每一項功能都是測試來驗證它的正確性。它為以后的開發(fā)提供支援。就算是開發(fā)后期,我們也可以輕松的增加功能或更改程序結(jié)構(gòu),而不用擔(dān)心這個過程中會破壞重要的東西。而且它為代碼的重構(gòu)提供了保障。這樣,我們就可以更自由的對程序進行改進。
2、它是一種設(shè)計行為。
編寫單元測試將使我們從調(diào)用者觀察、思考。特別是先寫測試(test-first),迫使我們把程序設(shè)計成易于調(diào)用和可測試的,即迫使我們解除軟件中的耦合。
3、它是一種編寫文檔的行為。
單元測試是一種無價的文檔,它是展示函數(shù)或類如何使用的最佳文檔。這份文檔是可編譯、可運行的,并且它保持最新,永遠與代碼同步。
4、它具有回歸性。
自動化的單元測試避免了代碼出現(xiàn)回歸,編寫完成之后,可以隨時隨地的快速運行測試。
單元測試主要的測試技術(shù)不包括
1、單元測試的基本方法
單元測試的基本方法有:人工靜態(tài)分析、自動靜態(tài)分析、自動動態(tài)測試,人工動態(tài)測試。
人工靜態(tài)分析:通過人工閱讀代碼來查找錯誤,一般是程序員交叉查看對方的代碼,可能發(fā)現(xiàn)有特征錯誤和無特征錯誤。
自動靜態(tài)分析:使用工具掃描代碼,根據(jù)某些預(yù)先設(shè)定的錯誤特征,發(fā)現(xiàn)并報告代碼中的可能錯誤,自動靜態(tài)分析只能發(fā)現(xiàn)語法特征錯誤。
自動動態(tài)測試:使用工具自動生成測試用例并執(zhí)行被測試程序,通過捕捉某些行為特征(如產(chǎn)生異常/程序崩潰等)來發(fā)現(xiàn)并報告錯誤,自動動態(tài)測試只能發(fā)現(xiàn)行為特征錯誤,對無特征錯誤完全無能為力,例如,前面所說的加法函數(shù),代碼可以說是最簡單的,錯誤也是最簡單的,但是自動動態(tài)測試仍然無法發(fā)現(xiàn),因為測試工具不可能自動了解代碼的功能。
人工動態(tài)測試:人工設(shè)定程序的輸入和預(yù)期的正確輸出,執(zhí)行程序,并判斷實際輸出是否符合預(yù)期,如果不符合預(yù)期,自動報告錯誤。這里所說的"人工",僅指測試用例的輸入和預(yù)期輸出是人工設(shè)定的,其他工作可以由人工完成,也可以借助工具自動完成。人工動態(tài)測試可以發(fā)現(xiàn)有特征錯誤和無特征錯誤,例如,前面所說的加法函數(shù),只要人工建立一個測試用例,輸入兩個1,并判斷輸出是否等于2,運行測試,就可以發(fā)現(xiàn)代碼中含有錯誤。
以上四種方法還可以進一步細分,例如,人工動態(tài)測試又有多種設(shè)計測試用例的方法,如果根據(jù)程序的功能來設(shè)計測試用例,就是黑盒測試,如果根據(jù)代碼及代碼的邏輯結(jié)構(gòu)來設(shè)計測試用例,就是白盒測試。
2、測試方法的選擇
工作中是不是把各種測試方法不分輕重都做一遍呢?顯然不行,項目工期和預(yù)算不會允許這么做,也不符合效益原則,應(yīng)該選擇一種方法作為主要測試方法,其他視情況取舍。
自動靜態(tài)分析、自動動態(tài)測試只能發(fā)現(xiàn)有特征錯誤,這兩種方法加起來,做到最好也僅限于發(fā)現(xiàn)有特征錯誤,而多數(shù)語法特征錯誤編譯器就能發(fā)現(xiàn),很多行為特征錯誤會在開發(fā)過 程中,或集成測試和系統(tǒng)測試中自動暴露出來,所以這兩種方法不宜作為主要測試方法。
人工靜態(tài)分析雖然可能發(fā)現(xiàn)有特征錯誤和無特征錯誤,但是要徹底找出所有錯誤來,顯然太難了。
人工動態(tài)測試可以發(fā)現(xiàn)有特征錯誤和無特征錯誤,并且具有廣闊的發(fā)揮空間,可以作為主要測試方法。
3、黑盒測試與白盒測試
常常見到"單元測試是白盒測試","單元測試也有黑盒"之類的說法,容易引起混亂。黑盒與白盒其實是測試方法,黑盒就是針對系統(tǒng)的外部特性進行測試,把目標(biāo)系統(tǒng)看作一個黑盒子,不考慮內(nèi)部結(jié)構(gòu);白盒就是針對系統(tǒng)的內(nèi)部結(jié)構(gòu)進行測試。各個測試階段都可以使用黑盒方法和白盒方法,即無論是單元測試、集成測試、系統(tǒng)測試階段都可以使用黑盒方法和白盒方法。
黑盒測試又叫功能測試,我們首先要測試程序是否實現(xiàn)了基本功能,因此,黑盒測試是基本測試。黑盒測試的主要缺陷是難于衡量完整性,而白盒測試正好可以彌補個缺陷。
白盒測試通過邏輯覆蓋率來衡量完整性,具有可以精確統(tǒng)計的數(shù)字指標(biāo)。邏輯單位主要有:語句、分支、條件、條件值、條件值組合,路徑。語句覆蓋就是覆蓋所有的語句,其他類推。另外還有一種判定條件覆蓋,其實是分支覆蓋與條件覆蓋的組合。跟條件有關(guān)的覆蓋就有三種,解釋一下:條件覆蓋是指覆蓋所有的條件表達式,即所有的條件表達式都至少計算一次,不考慮計算結(jié)果;條件值覆蓋是指覆蓋條件的所有可能取值,即每個條件的取真值和取假值都要至少計算一次;條件值組合覆蓋是指覆蓋所有條件取值的所有可能組合。與條件直接有關(guān)的錯誤主要是邏輯操作符錯誤,例如:||寫成&&,漏了寫!什么的,采用分支覆蓋與條件覆蓋的組合,基本上可以發(fā)現(xiàn)這些錯誤,而條件值覆蓋與條件值組合覆蓋往往需要大量的測試用例,因此,條件值覆蓋和條件值組合覆蓋的效費比偏低,比較有價值的覆蓋率是語句覆蓋、條件覆蓋、分支覆蓋、路徑覆蓋。
4、測試用例
人工動態(tài)測試需要人工設(shè)計測試用例。一個測試用例,就是設(shè)定輸入數(shù)據(jù),執(zhí)行被測試程序,并判斷輸出是否符合預(yù)期。輸出符合預(yù)期,則測試通過,否則測試失敗。一般來說,測試工具要能自動報告失敗的測試。
測試用例的主要內(nèi)容是輸入數(shù)據(jù)和預(yù)期輸出,簡稱輸入輸出,其中輸入是核心,輸入確定了,再根據(jù)程序的功能設(shè)定預(yù)期的正確輸出。
如果我們把函數(shù)看作測試單元,那么,輸入數(shù)據(jù)就是被測試函數(shù)所讀取的外部數(shù)據(jù)及這些數(shù)據(jù)的初始值。"外部數(shù)據(jù)"是對于被測試函數(shù)來說的,就是除了局部變量以外的其他數(shù)據(jù),分為幾類:參數(shù)、成員變量、全局變量、IO媒體。IO媒體是指文件、數(shù)據(jù)庫或其他儲存或傳輸數(shù)據(jù)的媒體,例如,被測試函數(shù)要從文件或數(shù)據(jù)庫讀取數(shù)據(jù),那么,文件或數(shù)據(jù)庫中的原始數(shù)據(jù)也屬于輸入數(shù)據(jù)。
單元測試的策略有哪些
本文發(fā)布于:2023-02-28 18:55:00,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/167758958248875.html
版權(quán)聲明:本站內(nèi)容均來自互聯(lián)網(wǎng),僅供演示用,請勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請與我們聯(lián)系,我們將在24小時內(nèi)刪除。
本文word下載地址:單元測試方法(常用的單元測試方法).doc
本文 PDF 下載地址:單元測試方法(常用的單元測試方法).pdf
| 留言與評論(共有 0 條評論) |