軟件測(cè)試 課件 單元4 單元測(cè)試_第1頁(yè)
軟件測(cè)試 課件 單元4 單元測(cè)試_第2頁(yè)
軟件測(cè)試 課件 單元4 單元測(cè)試_第3頁(yè)
軟件測(cè)試 課件 單元4 單元測(cè)試_第4頁(yè)
軟件測(cè)試 課件 單元4 單元測(cè)試_第5頁(yè)
已閱讀5頁(yè),還剩75頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

單元2單元測(cè)試軟件開(kāi)發(fā)工程師小張開(kāi)發(fā)了自動(dòng)售貨機(jī)系統(tǒng),他想測(cè)試一下代碼方法是否有問(wèn)題,應(yīng)該如何來(lái)進(jìn)行?單元測(cè)試可以幫助他解決此問(wèn)題。引例描述單元測(cè)試主要針對(duì)代碼中的方法或函數(shù)進(jìn)行測(cè)試,是代碼級(jí)最小單位的測(cè)試。通常單元測(cè)試在開(kāi)發(fā)階段由開(kāi)發(fā)人員完成,是程序開(kāi)發(fā)過(guò)程中非常重要的一個(gè)環(huán)節(jié)。單元測(cè)試一般使用自動(dòng)化測(cè)試工具完成,JUnit是一個(gè)開(kāi)源的Java編程語(yǔ)言的單元測(cè)試標(biāo)準(zhǔn)框架。引例描述開(kāi)發(fā)工程師小張要完成單元測(cè)試任務(wù),需按照下面3步的單元測(cè)試學(xué)習(xí)計(jì)劃來(lái)完成學(xué)習(xí)。1.學(xué)習(xí)單元測(cè)試的入門知識(shí),編寫(xiě)驅(qū)動(dòng)模塊和樁模塊程序?qū)Ρ粶y(cè)程序模塊進(jìn)行動(dòng)態(tài)測(cè)試;2.學(xué)習(xí)JUnit基礎(chǔ),對(duì)Java程序進(jìn)行單元測(cè)試;3.學(xué)習(xí)JUnit的核心架構(gòu),對(duì)自動(dòng)售貨機(jī)程序進(jìn)行單元測(cè)試。引例描述目錄動(dòng)態(tài)測(cè)試Java程序單元任務(wù)一使用JUnit測(cè)試Java程序任務(wù)二使用Junit測(cè)試程序任務(wù)三任務(wù)一動(dòng)態(tài)測(cè)試Java程序單元●本任務(wù)對(duì)已經(jīng)編寫(xiě)的Java程序方法進(jìn)行測(cè)試。開(kāi)發(fā)人員通過(guò)編寫(xiě)被測(cè)單元的上層模塊(驅(qū)動(dòng)模塊),被測(cè)單元所調(diào)用的模塊(樁模塊),建立單元測(cè)試的完整環(huán)境,使被測(cè)單元能夠運(yùn)行起來(lái),對(duì)Java程序方法進(jìn)行動(dòng)態(tài)測(cè)試,從而來(lái)驗(yàn)證被測(cè)單元的正確性。●在實(shí)際操作的過(guò)程中,學(xué)生應(yīng)獨(dú)立自主完成程序單元的分離,面對(duì)復(fù)雜的軟件系統(tǒng),能整體系統(tǒng)的考慮程序的執(zhí)行路徑,認(rèn)真對(duì)待每個(gè)單元模塊的細(xì)節(jié),細(xì)致、嚴(yán)謹(jǐn)、規(guī)范、全面、快速的設(shè)計(jì)被測(cè)程序的上層模塊和下層調(diào)用模塊。任務(wù)陳述

單元測(cè)試也成為模塊測(cè)試,是指對(duì)軟件中的最小可測(cè)試單元或基本組成單元進(jìn)行檢查和驗(yàn)證。對(duì)應(yīng)單元測(cè)試中單元的含義,一般要根據(jù)實(shí)際情況去判定其具體含義,對(duì)于軟件的代碼,單元就是一個(gè)函數(shù)、方法或者類,對(duì)于軟件的界面,單元就是一個(gè)窗口或菜單。通常而言,一個(gè)單元測(cè)試是用于判斷某個(gè)特定條件(或者場(chǎng)景)下某個(gè)特定函數(shù)的行為。如果將測(cè)試比做清洗臺(tái)機(jī)器,那么單元測(cè)試就是清洗各個(gè)零件的內(nèi)部?;顒?dòng)一認(rèn)識(shí)單元測(cè)試一、單元測(cè)試的定義單元測(cè)試是小段代碼,用于檢驗(yàn)被測(cè)代碼的一個(gè)很小的,很明確的功能是否正確。單元測(cè)試的作用是獲取應(yīng)用程序中可測(cè)軟件的最小片段,將其同其他代碼隔離開(kāi)來(lái),然后確定它的行為確實(shí)和開(kāi)發(fā)者所期望的一致。顯然,只有保證了最小單位的代碼準(zhǔn)確,才能有效構(gòu)建基于它們之上的軟件模塊及系統(tǒng)。單元測(cè)試是由程序員自己來(lái)完成。程序員有確保自己編寫(xiě)的軟件單元準(zhǔn)確的責(zé)任,通過(guò)對(duì)自己編寫(xiě)的功能代碼進(jìn)行單元測(cè)試,大大提高了代碼和軟件質(zhì)量。單元測(cè)試不但會(huì)使工作完成得更輕松,而且會(huì)令設(shè)計(jì)變得更好,甚至大大減少花在調(diào)試上的時(shí)間?;顒?dòng)一認(rèn)識(shí)單元測(cè)試二、單元測(cè)試的目的單元測(cè)試中選取的單元應(yīng)具有明確的功能定義、性能定義以及連接其他部分的接口定義等,且應(yīng)可以清晰地與其他單元區(qū)分開(kāi)來(lái)。從某種意義上而言,單元的概念已經(jīng)護(hù)展為組件。單元可以認(rèn)為是人為規(guī)定的最小的被測(cè)功能模塊。1.對(duì)于C語(yǔ)言這類面向過(guò)程的開(kāi)發(fā)語(yǔ)言,單元常指一個(gè)函數(shù)或子過(guò)程。在特殊情況下,若存在幾個(gè)函數(shù)之間具有強(qiáng)耦合性,導(dǎo)致函數(shù)關(guān)系非常密切,則應(yīng)將這幾個(gè)函數(shù)共同作為一個(gè)單元來(lái)測(cè)試。2.對(duì)于C++、Java語(yǔ)言或C#等面向?qū)ο蟮拈_(kāi)發(fā)語(yǔ)言,單元一般指一個(gè)類。然而,某些基礎(chǔ)類可能非常龐大,涉及大量屬性和方法,甚至需要幾個(gè)開(kāi)發(fā)人員來(lái)編碼完成,則若將該類作為一個(gè)單元來(lái)測(cè)試并不合適,此時(shí)的測(cè)試將上升到集成測(cè)試的層面。3.圖形化軟件中,單元常指一個(gè)窗口或一個(gè)菜單?;顒?dòng)一認(rèn)識(shí)單元測(cè)試三、單元選取原則1.單元功能測(cè)試;2.單元接口測(cè)試;3.單元內(nèi)部數(shù)據(jù)流測(cè)試;4.單元邏輯路徑測(cè)試;5.單元可預(yù)見(jiàn)異常或出錯(cuò)條件測(cè)試?;顒?dòng)一認(rèn)識(shí)單元測(cè)試四、單元測(cè)試的任務(wù)由于單元測(cè)試所測(cè)試的不僅僅是代碼,還要測(cè)試接口、局部數(shù)據(jù)結(jié)構(gòu)、獨(dú)立路徑、邊界條件等,因此單元測(cè)試的主要依據(jù)是軟件詳細(xì)設(shè)計(jì)說(shuō)明書(shū)?;顒?dòng)一認(rèn)識(shí)單元測(cè)試五、單元測(cè)試的依據(jù)單元測(cè)試過(guò)程中應(yīng)綜合應(yīng)用各種黑盒測(cè)試和白盒測(cè)試方法。使用黑盒測(cè)試方法對(duì)被測(cè)單元進(jìn)行功能測(cè)試,使用白盒測(cè)試方法對(duì)被測(cè)單元進(jìn)行代碼測(cè)試?;顒?dòng)二單元測(cè)試策略一、單元測(cè)試方法1.靜態(tài)測(cè)試技術(shù)靜態(tài)測(cè)試技術(shù)是指不運(yùn)行被測(cè)程序本身。僅通過(guò)分析或檢查源程序的語(yǔ)法、結(jié)構(gòu)、接口等來(lái)檢查程序的正確性,對(duì)需求規(guī)格說(shuō)明書(shū)、軟件設(shè)計(jì)說(shuō)明書(shū)、源程序作結(jié)構(gòu)分析,流程圖分析、符號(hào)執(zhí)行來(lái)找錯(cuò)。靜態(tài)測(cè)試包括代碼檢查、靜態(tài)結(jié)構(gòu)分析、代碼質(zhì)量度量等。它可以由人工進(jìn)行,充分發(fā)揮人的邏輯思維優(yōu)勢(shì),也可以借助軟件工具自動(dòng)進(jìn)行?;顒?dòng)二單元測(cè)試策略一、單元測(cè)試方法1.靜態(tài)測(cè)試技術(shù)靜態(tài)測(cè)試技術(shù)是指不運(yùn)行被測(cè)程序本身。僅通過(guò)分析或檢查源程序的語(yǔ)法、結(jié)構(gòu)、接口等來(lái)檢查程序的正確性,對(duì)需求規(guī)格說(shuō)明書(shū)、軟件設(shè)計(jì)說(shuō)明書(shū)、源程序作結(jié)構(gòu)分析,流程圖分析、符號(hào)執(zhí)行來(lái)找錯(cuò)。靜態(tài)測(cè)試包括代碼檢查、靜態(tài)結(jié)構(gòu)分析、代碼質(zhì)量度量等。它可以由人工進(jìn)行,充分發(fā)揮人的邏輯思維優(yōu)勢(shì),也可以借助軟件工具自動(dòng)進(jìn)行?;顒?dòng)二單元測(cè)試策略一、單元測(cè)試方法2.動(dòng)態(tài)測(cè)試技術(shù)動(dòng)態(tài)測(cè)試技術(shù)是指通過(guò)運(yùn)行被測(cè)程序,檢查運(yùn)行結(jié)果與預(yù)期結(jié)果的差異,并分析運(yùn)行效率和健壯性等性能。這種技術(shù)山3部分組成:構(gòu)造測(cè)試實(shí)例、執(zhí)行程序、分析程序的輸出結(jié)果。且前,動(dòng)態(tài)測(cè)試也是測(cè)試工作的主要方式?;顒?dòng)二單元測(cè)試策略一、單元測(cè)試方法靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試應(yīng)配合使用。靜態(tài)測(cè)試的代碼分析結(jié)果適用于所有可能的運(yùn)行情況,而動(dòng)態(tài)測(cè)試由于總是針對(duì)特殊取值的測(cè)試,因此僅能測(cè)試到程序的特定屬性,即保證被測(cè)組件在其測(cè)試平臺(tái)上對(duì)于特定輸入是有效的?;顒?dòng)二單元測(cè)試策略一、單元測(cè)試方法單元本身并不是一個(gè)獨(dú)立的程序,往往需要基于被測(cè)單元的接口開(kāi)發(fā)相應(yīng)的驅(qū)動(dòng)模塊和樁模塊。因此,單元測(cè)試環(huán)境包括驅(qū)動(dòng)模塊和樁模塊?;顒?dòng)二單元測(cè)試策略二、單元測(cè)試環(huán)境1.驅(qū)動(dòng)模塊和樁模塊定義(1)驅(qū)動(dòng)模塊是模擬被測(cè)單元的上級(jí)模塊,用于接收測(cè)試數(shù)據(jù)、啟動(dòng)被測(cè)模塊和輸出結(jié)果。(2)樁模塊是模擬被測(cè)單元所調(diào)用的模塊。有時(shí),需要使用子模塊的接口,才能做少量數(shù)據(jù)操作,并驗(yàn)證和打融入最的信息,然后返回。樁模塊不包含原模塊的所有細(xì)節(jié)?;顒?dòng)二單元測(cè)試策略二、單元測(cè)試環(huán)境2.驅(qū)動(dòng)模塊和樁模塊的使用條件設(shè)計(jì)驅(qū)動(dòng)模塊和樁模塊時(shí),一方面應(yīng)考思到測(cè)試結(jié)論的有效性決定于單元測(cè)試環(huán)境下模擬目標(biāo)環(huán)境(程序)執(zhí)行的精確度,即設(shè)計(jì)驅(qū)動(dòng)模塊和樁模塊時(shí)應(yīng)能慮到測(cè)試用例執(zhí)行應(yīng)滿足的所有環(huán)境因素。另方面,也應(yīng)充分考慮到測(cè)試過(guò)程的選代性,使得驅(qū)動(dòng)模塊和樁模塊在回歸測(cè)試中能夠不經(jīng)修改直接使用,提高重用性,進(jìn)而提高回歸測(cè)試效率?;顒?dòng)二單元測(cè)試策略二、單元測(cè)試環(huán)境3.構(gòu)建單元測(cè)試環(huán)境建立單元測(cè)試的環(huán)境,需完成以下工作:構(gòu)造最小運(yùn)行調(diào)度系統(tǒng),即構(gòu)造被測(cè)單元的驅(qū)動(dòng)模塊;模擬被測(cè)單元的接口,即構(gòu)造被測(cè)單元調(diào)用的樁模塊;模擬生成測(cè)試數(shù)據(jù)及狀態(tài),即測(cè)試驅(qū)動(dòng)程序,為被測(cè)單元運(yùn)行準(zhǔn)備動(dòng)態(tài)環(huán)境。活動(dòng)二單元測(cè)試策略二、單元測(cè)試環(huán)境4.驅(qū)動(dòng)模塊的設(shè)計(jì)在多數(shù)的實(shí)際應(yīng)用中,驅(qū)動(dòng)模塊的設(shè)計(jì)可根據(jù)其定義得到,步驟如下。(1)接收測(cè)試的輸入數(shù)據(jù)。實(shí)現(xiàn)方式是將輸入數(shù)據(jù)寫(xiě)在測(cè)試程序中,更好的策略是通過(guò)外部調(diào)用的方式從數(shù)據(jù)文件中依次讀入數(shù)據(jù)。(2)將數(shù)據(jù)傳遞給被測(cè)單元,從而啟動(dòng)被測(cè)單元實(shí)現(xiàn)方式是調(diào)用被測(cè)單元,同時(shí)利用參數(shù)傳遞將輸入數(shù)據(jù)傳給被測(cè)單元。(3)打印和輸出相關(guān)結(jié)果,判斷測(cè)試是通過(guò)還是失敗。利用結(jié)果的比較來(lái)判斷,在允許的誤差條件下,一致的結(jié)果表明測(cè)試通過(guò),否則視為測(cè)試失敗。執(zhí)行結(jié)果可以直接輸出到屏幕?;顒?dòng)二單元測(cè)試策略二、單元測(cè)試環(huán)境5.樁模塊的設(shè)計(jì)(1)完成原單元的基本功能,即針對(duì)特定的輸入可以輸出正確的結(jié)果,注意:這里所謂的完成功能其實(shí)并非真正在模塊內(nèi)部去執(zhí)行某些復(fù)雜的邏輯判斷或計(jì)算過(guò)程,而是簡(jiǎn)單的批量打印而已,只是將固定的某些執(zhí)行結(jié)果簡(jiǎn)單輸出。(2)能夠被正確調(diào)用,即符合正確的輸入條件,包括個(gè)數(shù)、參數(shù)類型順序等與被模擬單元完全一致。(3)有返回值。若有返回值,則應(yīng)針對(duì)特定輸入返回與被模擬單元完全一致的結(jié)果。(4)不包含原單元的所有細(xì)節(jié)。原單元的輸入情況可能是無(wú)限多的,所謂模擬意味將僅挑選式中典型的輸入(如邊界),給出己知的輸出結(jié)果?;顒?dòng)二單元測(cè)試策略二、單元測(cè)試環(huán)境6.測(cè)試驅(qū)動(dòng)程序的設(shè)計(jì)測(cè)試驅(qū)動(dòng)程序是通過(guò)測(cè)試用例來(lái)驅(qū)動(dòng)被測(cè)單元,以便于觀察測(cè)試用例執(zhí)行結(jié)果,查找缺陷的代碼段。簡(jiǎn)單地說(shuō),測(cè)試驅(qū)動(dòng)是能夠執(zhí)行測(cè)試用例或測(cè)試套包的軟件程序或測(cè)試工具。測(cè)試驅(qū)動(dòng)程序的設(shè)計(jì)可從以下方面來(lái)考慮:(1)利用已有的測(cè)試用例,接收測(cè)試數(shù)據(jù)。(2)將測(cè)試數(shù)據(jù)傳遞給被測(cè)單元。(3)輸出測(cè)試用例的執(zhí)行結(jié)果?;顒?dòng)二單元測(cè)試策略二、單元測(cè)試環(huán)境1.單元代碼測(cè)試的方式實(shí)現(xiàn)對(duì)單元代碼測(cè)試的方式主要包括:(1)在開(kāi)發(fā)源代碼中直接加入斷點(diǎn)(和調(diào)試比較相似);(2)通過(guò)調(diào)用被測(cè)函數(shù)輸入一些測(cè)試數(shù)據(jù),觀察實(shí)際執(zhí)行情況與預(yù)期情況之間的差異;(3)針對(duì)被測(cè)對(duì)象編寫(xiě)專門的測(cè)試代碼,并專門對(duì)這些代碼進(jìn)行組織和管理?;顒?dòng)二單元測(cè)試策略三、單元測(cè)試的設(shè)計(jì)2.單元測(cè)試的原則編寫(xiě)單元測(cè)試代碼是,應(yīng)遵循以下基本原則。(1)不要將測(cè)試用例的執(zhí)行結(jié)果輸出到屏幕;(2)將測(cè)試代碼與開(kāi)發(fā)代碼分開(kāi);(3)所有測(cè)試方法以test開(kāi)頭,測(cè)試代碼分組放置;(4)在一個(gè)獨(dú)立的測(cè)試中避免多重聲明;(5)測(cè)試正確的事情。活動(dòng)二單元測(cè)試策略三、單元測(cè)試的設(shè)計(jì)1.要測(cè)試以下程序段的正確性,需要構(gòu)造被測(cè)單元的驅(qū)動(dòng)模塊。 intmax(intx,inty){ intz; if(x>y) z=x; else z=y; returnz; }任務(wù)實(shí)施根據(jù)被測(cè)單元的情況,需要編寫(xiě)驅(qū)動(dòng)模塊,通過(guò)給定實(shí)參5和8來(lái)調(diào)用被測(cè)單元。需要?jiǎng)?chuàng)建一個(gè)類(Test.java),并將被測(cè)單元封裝在獨(dú)立的類中(Max.java),在測(cè)試類中創(chuàng)建被測(cè)類的對(duì)象,以實(shí)現(xiàn)測(cè)試程序和被測(cè)程序的分離,通過(guò)調(diào)用被測(cè)類對(duì)象的方法進(jìn)行測(cè)試。任務(wù)實(shí)施被測(cè)單元封裝為一個(gè)類(Max.java)publicclassMax{ intmax(intx,inty){ intz; if(x>y) z=x; else z=y; returnz; }}任務(wù)實(shí)施驅(qū)動(dòng)模塊的類(Test.java)publicclassTest{ publicstaticvoidmain(String[]args){ intresult; Maxm=newMax(); result=m.max(5,8); System.out.println("5和8的最大值是:"+result); }}任務(wù)實(shí)施運(yùn)行結(jié)果如圖所示:任務(wù)實(shí)施2.對(duì)下面的程序進(jìn)行單元測(cè)試。publicstaticvoidmain(String[]args){ intyear,leap1; Scannerinput=newScanner(System.in); System.out.println("請(qǐng)輸入一個(gè)年份:"); year=input.nextInt(); leap1=leapyear(year); if(leap1==1) System.out.println(year+"isaleapyear."); else System.out.println(year+"isnotaleapyear."); }任務(wù)實(shí)施被測(cè)單元是一個(gè)主函數(shù),需要構(gòu)造被測(cè)單元的樁模塊,通過(guò)調(diào)用一個(gè)leapyear(intyear),使被測(cè)單元能順利調(diào)用,從而測(cè)試該單元的正確性。任務(wù)實(shí)施import

java.util.Scanner;public

classLeapYear{

static

intleapyear(intyear){

if(year%4==0&&year%100!=0||year%400==0)

return1;

else

return0; }

public

static

voidmain(String[]args){

intyear,leap1; Scannerinput=newScanner(System.in); System.out.println("請(qǐng)輸入一個(gè)年份:"); year=input.nextInt(); LeapYearm=newLeapYear(); leap1=m.leapyear(year);

if(leap1==1) System.out.println(year+"isaleapyear.");

else System.out.println(year+"isnotaleapyear."); }

}任務(wù)實(shí)施運(yùn)行結(jié)果如下圖任務(wù)實(shí)施任務(wù)二使用JUnit測(cè)試Java程序●本任務(wù)通過(guò)對(duì)一個(gè)簡(jiǎn)單計(jì)算器的加、減、乘、除功能的測(cè)試代碼的編寫(xiě),了解單元測(cè)試的基本概念和JUnit單元測(cè)試工具。掌握J(rèn)Unit的安裝,熟悉使用Eclipse和JUnit進(jìn)行簡(jiǎn)單測(cè)試用例編寫(xiě)和運(yùn)行的過(guò)程,為后面的JUnit框架的理解和使用提供基礎(chǔ)?!馢Unit是Java最主要的單元測(cè)試框架,對(duì)單元測(cè)試的基本概念的學(xué)習(xí)和理解,能幫助學(xué)生進(jìn)步理解JUnit的基本概念。在理解JUnit的基礎(chǔ)上,要求學(xué)生進(jìn)步掌握使用Eclipse進(jìn)行單元測(cè)試代碼的編寫(xiě)流程。任務(wù)陳述活動(dòng)一認(rèn)識(shí)JUnit

在Java編程環(huán)境中,JUnit是一個(gè)已經(jīng)被多數(shù)Java程序員采用和實(shí)證的優(yōu)秀測(cè)試框架。開(kāi)發(fā)人員只需要按照J(rèn)Unit的約定編寫(xiě)測(cè)試代碼,就可以對(duì)被測(cè)試代碼進(jìn)行測(cè)試。JUnit是1997年由ErichGamma(GoF之一)和KentBeck(XP和refactor先驅(qū)者之一)創(chuàng)建的。1999年以來(lái),JUnit已經(jīng)發(fā)展成業(yè)界標(biāo)準(zhǔn)的Java測(cè)試和設(shè)計(jì)工具。一、認(rèn)識(shí)JUnit活動(dòng)一認(rèn)識(shí)JUnit1.使用斷言方法判斷期望值和實(shí)際值差異,返回Boolean值;2.測(cè)試驅(qū)動(dòng)設(shè)備使用共同的初始化變量或者實(shí)例。3.測(cè)試包結(jié)構(gòu)便于組織和集成運(yùn)行。4.支持圖形交互模式和文本交互模式。二、JUnit特性活動(dòng)一認(rèn)識(shí)JUnit1.JUnit是開(kāi)源工具;2.JUnit可以將測(cè)試代碼和產(chǎn)品代碼分開(kāi);3.JUnit的測(cè)試代碼非常容易編寫(xiě)且功能強(qiáng)大;4.JUnit自動(dòng)檢測(cè)測(cè)試結(jié)果并且提供及時(shí)的反饋;5.易于集成;6.便于組織。四、JUnit優(yōu)點(diǎn)三、JUnit優(yōu)點(diǎn)活動(dòng)一認(rèn)識(shí)JUnit1.只需要到JUnit的官方網(wǎng)站下載JUnit最新版本的安裝程序。2.將下載得到的junit.jar加入CLASSPATH環(huán)境變量即可使用JUnit,如果使用Eclipse工具,則可以在項(xiàng)目屬性的BuildPath中單擊“Add

Library”選項(xiàng),選擇JUnit的jar包即可。四、JUnit下載和安裝活動(dòng)二

JUnit的基本應(yīng)用public

classCalculator{

public

intadd(inta,intb){

returna+b; }

public

intsubstrate(inta,intb){

returna-b; }

public

intmultiply(inta,intb){

returna*b; }

public

intdivide(inta,intb){

returna/b; }}一、編寫(xiě)計(jì)算器程序的代碼活動(dòng)二JUnit的基本應(yīng)用packagejunit.demo;import

staticorg.junit.Assert.*;importorg.junit.Test;public

classCalculatorTest{ @Test

public

voidtestAdd(){ Calculatorcalculator=newCalculator();

intresult=calculator.add(3,2);

assertEquals(5,result); }}二、編寫(xiě)計(jì)算器程序的測(cè)試代碼活動(dòng)二

JUnit的基本應(yīng)用第1行,定義測(cè)試類所在的包。第2、3行,引入JUnit測(cè)試類必需的jar包。第4行,定義一個(gè)測(cè)試類CalculatorTest.第5行,用JUnit的注解@Test,將下面的方法標(biāo)注為一個(gè)測(cè)試方法。第6行,定義一個(gè)測(cè)試方法,方法名可自定義,一般以test開(kāi)頭。第7行,遵循對(duì)象測(cè)試的風(fēng)格,創(chuàng)建對(duì)象。第8行,

測(cè)試Calculator的add的方法。第9行,用斷言比較調(diào)用add方法之后的返回值和期望值是否致。二、編寫(xiě)計(jì)算器程序的測(cè)試代碼活動(dòng)二

JUnit的基本應(yīng)用JUnit

4測(cè)試用例的基本結(jié)構(gòu):1.JUnit一個(gè)測(cè)試用例對(duì)應(yīng)一個(gè)測(cè)試方法,即一個(gè)函數(shù)。要?jiǎng)?chuàng)建測(cè)試,必須編寫(xiě)對(duì)應(yīng)的測(cè)試方法。2.JUnit4的測(cè)試是基于注解的,每個(gè)測(cè)試方法前面都要加上@Test注解。3.每個(gè)測(cè)試方法要做一些斷言,

斷言主要用于比較實(shí)際結(jié)果與期望結(jié)果是否相符。上面的例子中,如果返回值不等于5,斷言失敗,整個(gè)測(cè)試用例運(yùn)行的結(jié)果就是失敗,否則表示這個(gè)測(cè)試用例通過(guò)。二、編寫(xiě)計(jì)算器程序的測(cè)試代碼活動(dòng)二

JUnit的基本應(yīng)用JUnit4提供3種不同方式的運(yùn)行器執(zhí)行測(cè)試用例:文本方式;AWT方式;Swing方式。三、運(yùn)行測(cè)試用例活動(dòng)二

JUnit的基本應(yīng)用JUnit

4測(cè)試用例的基本結(jié)構(gòu):1.JUnit一個(gè)測(cè)試用例對(duì)應(yīng)一個(gè)測(cè)試方法,即一個(gè)函數(shù)。要?jiǎng)?chuàng)建測(cè)試,必須編寫(xiě)對(duì)應(yīng)的測(cè)試方法。2.JUnit4的測(cè)試是基于注解的,每個(gè)測(cè)試方法前面都要加上@Test注解。3.每個(gè)測(cè)試方法要做一些斷言,

斷言主要用于比較實(shí)際結(jié)果與期望結(jié)果是否相符。上面的例子中,如果返回值不等于5,斷言失敗,整個(gè)測(cè)試用例運(yùn)行的結(jié)果就是失敗,否則表示這個(gè)測(cè)試用例通過(guò)。三、編寫(xiě)計(jì)算器程序的測(cè)試代碼1.JUnit的下載與安裝JUnit工具的jar包可以從下載。JUnit是以jar文件的形式發(fā)布的,其中包括了所有必需的類。安裝JUnit,就是把jar文件放到編譯器能夠找到的地方,如果不使用IDE,而是從命令行直接調(diào)用JDK,則必須上CLASSPATH包含JUnit的jar包所在的路徑。簡(jiǎn)單來(lái)說(shuō),就是解壓下載的壓縮文件到指定文件夾,并將JUnit.jar包加入到CLASSPATH中即可完成安裝。任務(wù)實(shí)施2.對(duì)一個(gè)Java類進(jìn)行單元測(cè)試。該類為Caculator,實(shí)現(xiàn)簡(jiǎn)單的加、減、乘、除等功能,實(shí)現(xiàn)用Eclipse編寫(xiě)JUnit單元測(cè)試。任務(wù)實(shí)施(1)在Eclipse中引入JUnit任務(wù)實(shí)施(1)在Eclipse中引入JUnit任務(wù)實(shí)施(2)在Java項(xiàng)目中編寫(xiě)被測(cè)單元程序任務(wù)實(shí)施(3)JUnit測(cè)試用例編寫(xiě)任務(wù)實(shí)施(3)JUnit測(cè)試用例編寫(xiě)任務(wù)實(shí)施(4)JUnit測(cè)試用例編寫(xiě)任務(wù)實(shí)施任務(wù)三使用Junit測(cè)試自動(dòng)售貨機(jī)程序●本任務(wù)將利用經(jīng)典的自動(dòng)售貨機(jī)案例,完成Junit4的測(cè)試用例的編寫(xiě),掌握J(rèn)Unit的測(cè)試框架和核心類:TestCase、TestSuite、TestRunner和Assert,以及它們?nèi)绾喂餐ぷ?,完成測(cè)試用例的編寫(xiě)和運(yùn)行。JUnit4是一個(gè)全新的框架,它充分利用了Java5的注解,使測(cè)試更為簡(jiǎn)單快捷。通過(guò)對(duì)本任務(wù)的學(xué)習(xí),充分理解JUnit4的注解的應(yīng)用。任務(wù)陳述活動(dòng)一Junit核心類1.TestCase

(測(cè)試用例)——擴(kuò)展

了JUnit的TestCase

類的類。它以testXxxx方法的形式包含一個(gè)或多個(gè)測(cè)試。一個(gè)測(cè)試用例把具有公共行為的測(cè)試歸入一組。2.TestSuite

(測(cè)試集合)——一組測(cè)試。

一個(gè)測(cè)試集

合是把多個(gè)相關(guān)測(cè)試歸入一組的便捷方式。3.TestRuner(測(cè)試運(yùn)行器)執(zhí)行testsuite的程序。JUnit提供了幾個(gè)測(cè)試運(yùn)行器,可以用它們來(lái)執(zhí)行你的測(cè)試。一、JUnit核心類與接口活動(dòng)一Junit核心類一、JUnit核心類與接口類/借口功能Assert當(dāng)條件成立時(shí),asset方法保持沉默,但若條件不成立就拋出異常TestResult包含了測(cè)試中發(fā)生的所有錯(cuò)誤或者失敗Test可以運(yùn)行Test并把結(jié)果傳遞給TestResultTestListener測(cè)試中若產(chǎn)生事件(開(kāi)始、結(jié)束、錯(cuò)誤、失敗)會(huì)通知TestListenerTestCaseTestCase定義了可以用于運(yùn)行多項(xiàng)測(cè)試的環(huán)境(或者說(shuō)固定設(shè)備)TestSuiteTestSuite運(yùn)行組TestCase

(它們可能包含其他TestSuite),它是Test的組合BaseTestRunnerestRunner是用來(lái)啟動(dòng)測(cè)試的用戶界面,Base

TestRunner是所有TestRunner的超類活動(dòng)一Junit核心類1.Teat接口Test接口是TestCase、TestSuite的共同接口,用于運(yùn)行測(cè)試和收集測(cè)試結(jié)果。它的run(TestResultresult)萬(wàn)法用來(lái)運(yùn)行Test,并且將結(jié)果保存到TestResult.2.TestResult(測(cè)試結(jié)果)TestResult類收集TestCase的執(zhí)行結(jié)果,并報(bào)告測(cè)試結(jié)果。若測(cè)試成功,那么TestResult代碼是正確的,進(jìn)度條就是綠色顯示,否則TestResult就會(huì)報(bào)告失敗,并輸出失敗測(cè)試的數(shù)目和它的堆棧軌跡。3.TestListener接口JUnit框架提供了TestListener接口,以幫助對(duì)象訪問(wèn)TestResult并創(chuàng)建有用的報(bào)告。TestRunner實(shí)現(xiàn)了TestListener,很多特定的JUnit擴(kuò)展也實(shí)現(xiàn)了TestListener.可以有任意數(shù)量的TestListener向JUnit框架注冊(cè),這些TestListener可以根據(jù)TestResult提供的信息做它們需要做的任何事情。二、Junit其他接口活動(dòng)一Junit核心類1.用fixture管理資源fixture是運(yùn)行一個(gè)或多個(gè)測(cè)試所需的公用資源或數(shù)據(jù)集合。TestCase通過(guò)setUp和tearDown方法來(lái)自動(dòng)創(chuàng)建和銷毀fixture。TestCase會(huì)在運(yùn)行每個(gè)測(cè)試之前調(diào)用setUp,并且在每個(gè)測(cè)試完成之后調(diào)用tearDown。把不止一個(gè)測(cè)試方法放進(jìn)同一個(gè)TestCase的一個(gè)重要理由就是可以共享fixture代碼。三、TestCase活動(dòng)一Junit核心類2.TestCase成員三、TestCase方法描述countTestCase計(jì)算run()所執(zhí)行的TestCase的數(shù)目createResult創(chuàng)建默認(rèn)的TestResult對(duì)象getName獲得TestCase的名字run運(yùn)行TestCase并收集TestRrsult中的結(jié)果runBare運(yùn)行測(cè)試序列(比如自動(dòng)發(fā)現(xiàn)test方法)runTest重載以運(yùn)行測(cè)試并斷言其狀態(tài)setName設(shè)置TestCase的名字setup初始化資源配置tearDown清除資產(chǎn)配置toString返回TextCase的字符串表示活動(dòng)一Junit核心類Assert是JUnit框架的一個(gè)靜態(tài)類,包含一組靜態(tài)的測(cè)試方法,用于期望值和實(shí)際值比較是否正確。如果測(cè)試失敗,Assert類就會(huì)拋出一個(gè)AssertionFailedError異常。四、Junit斷言方法描述assertTrue斷言條件為真。若不滿足,方法拋出帶有相應(yīng)的信息(如果有)的AssertionFailedError異常assertFalse斷言條件為假。若不滿足,方法拋出帶有相應(yīng)的信息(若果有)的AssertionFailedError異常assertEquals斷言兩個(gè)對(duì)象相等。若不滿足,方法拋出帶有相應(yīng)的信息(如果有)的AssertionFailedError異常assertNotNull斷言對(duì)象不為null。若不滿足,方法拋出帶有相應(yīng)的信息(如果有)的AssertionFailedError異常assertNull斷言對(duì)象為null。若不滿足,方法拋出帶有相應(yīng)的信息(如果有)的AssertionFailedError異常assertSame斷言兩個(gè)引用指向同一個(gè)對(duì)象。若不滿足,方法拋出帶有相應(yīng)的信息(如果有)的AssertionFailedError異常assertNotSame斷言兩個(gè)指向不同對(duì)象。若不滿足,方法拋出帶有相應(yīng)的信息(如果有)的AssertionFailedError異常fail強(qiáng)制測(cè)試失敗,并給出指定信息活動(dòng)二

JUnit測(cè)試套件默認(rèn)的TestSuite會(huì)掃描測(cè)試類,找出所有以test開(kāi)頭的方法。默認(rèn)的TestSuite在內(nèi)部為每個(gè)testXxxx方法都創(chuàng)建一個(gè)TestCase的實(shí)例,要調(diào)用的方法的名稱會(huì)傳遞給TestCase的構(gòu)造函數(shù),這樣每個(gè)實(shí)例就有個(gè)獨(dú)一無(wú)二的標(biāo)識(shí)。一、運(yùn)行自動(dòng)的Suite活動(dòng)二

JUnit測(cè)試套件PublicstaticTestsuite()

{ReturnnewTestSuite(CalculatorTest.class);}這就相當(dāng)于:

PublicstaticTestsuite()

{TestSuitesuite=newTestSuite();Suite.addTest(newCalculatorTest("testAdd"));return

suite;}一、運(yùn)行自動(dòng)的Suite活動(dòng)二

JUnit測(cè)試套件publicclassAllTestsextendsTestCase{publicstaticTestsuite()(TestSuitesuite=newTestSuite(AllTests.class.getName());Suite.addTestSuite(CalculatorTest.class);returnsuite;}}二、編寫(xiě)自己的TestSuite活動(dòng)二

JUnit測(cè)試套件1.測(cè)試用例必須是公有類(public);2.測(cè)試用例必須繼承于TestCase類;3.測(cè)試用例的測(cè)試方法必須是公有的(public);4.測(cè)試用例的測(cè)試方法必須被聲明為void;5.測(cè)試用例的測(cè)試方法的前置名詞必須是test;6.測(cè)試用例的測(cè)試方法無(wú)任何傳遞參數(shù)。二、編寫(xiě)自己的TestSuite活動(dòng)三探究JUnit4Java注解(Annotation)的使用方法是@注解名,能通過(guò)簡(jiǎn)單的詞語(yǔ)來(lái)實(shí)現(xiàn)一些功能。一、認(rèn)識(shí)JUnit4注解活動(dòng)三探究JUnit4在JUnit中常用的注解有@Test、@Ignore、@BeforeClass、@AfterClass、@Before、@After、@Runwith、@Parameters。二、常用注釋活動(dòng)三探究JUnit41.@TestTesl表明這是一個(gè)測(cè)試方法可以隨意取,在Junit中將會(huì)自動(dòng)被執(zhí)行。對(duì)于方法的聲明有如下要求:名字可以隨意取,但返回值必須為void類型,而且不能有任何參數(shù)。如果違反這些規(guī)定,會(huì)在運(yùn)行時(shí)拋出一個(gè)異常。例如:@Test publicvoidtestAdd(){ Calculatorcalculator=newCalculator(); intresult=calculator.add(3,4); assertEquals(9,result); }二、常用注釋活動(dòng)三探究JUnit42.@Before初始化方法,在任何一個(gè)測(cè)試執(zhí)行之前必須執(zhí)行的代碼,跟3.X中的setUp()方法具有相同功能。格式:@Beforepublicvoidmethod(),例如:@Before publicvoidsetUp()throwsException{ Calculatorcalculator=newCalculator(); }二、常用注釋活動(dòng)三探究JUnit43.@After釋放資源,在任何測(cè)試執(zhí)行之后需要進(jìn)行的收尾工作。跟3.X中的tearDown()方法具有相同的功能。格式:@Afterpublicvoidmethod(),例如:@After publicvoidtearDown()throwsException{ calculator=null; }二、常用注釋活動(dòng)三探究JUnit44.@BeforeClass針對(duì)所有測(cè)試,在所有測(cè)試方法執(zhí)行前執(zhí)行一次,且必須為publicstaticvoid,此注解為4.X新增功能。格式:@BeoreClasspublicvoidmethod(),例如:@BeforeClass publicstaticvoidsetUpBeforeClass()throwsException{ System.out.println("@BeforeClassiscalled!"); }二、常用注釋活動(dòng)三探究JUnit45.@AfterClass針對(duì)所有測(cè)試,在所有測(cè)試方法執(zhí)行結(jié)束執(zhí)行一次,且必須為publicstaticvoid,此注解為4.X新增功能。格式:@AfterClasspublicvoidm

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論