SSH框架項目教程課件第5章第一講_第1頁
SSH框架項目教程課件第5章第一講_第2頁
SSH框架項目教程課件第5章第一講_第3頁
SSH框架項目教程課件第5章第一講_第4頁
SSH框架項目教程課件第5章第一講_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

重慶正大軟件學院軟件系《MVC框架程序設(shè)計》電子教案重慶正大軟件學院軟件系《MVC框架程序設(shè)計》課程組重慶正大軟件職業(yè)技術(shù)學院教案(項目類)授課對象系別軟件系本次課學時4學時年級班次大二章節(jié)題目第5章Junit測試工具目的要求(含技能要求)理解測試、單元測試的概念理解測試工具的作用掌握junit測試工具的使用本節(jié)重點掌握junit測試工具的使用本節(jié)難點理解測試、單元測試的概念教學方法項目教學法教學用具機房、屏幕廣播問題引入通過改用戶注冊案例,從而引出本次課程。難點與重點講解方法引導、分析、講解、實作演示本次課小結(jié)課程小結(jié)教后禮記討論、思考題、作業(yè)(含實訓作業(yè))完成本次課的課堂任務(wù)填寫實驗報告任務(wù)介紹(5分鐘)改造3.1節(jié)的任務(wù),在注冊入庫功能的業(yè)務(wù)控制層(action)與業(yè)務(wù)處理層(service)之間引入spring框架。任務(wù)解析(50-60分鐘)創(chuàng)建測試類創(chuàng)建setUpBeforeClass方法編寫測試方法執(zhí)行Junit測試詳細步驟創(chuàng)建測試類創(chuàng)建測試類RegisterActionTest,為要測試的類RegisterAction定義一個靜態(tài)成員變量,參考代碼如下:publicclassRegisterActionTest{ staticRegisterActionregisterAction;//被測試的對象定義為靜態(tài)成員變量}創(chuàng)建setUpBeforeClass方法在RegisterActionTest中創(chuàng)建成員方法setUpBeforeClass,并標注為用于進行測試的初始化工作。關(guān)鍵代碼如下:@BeforeClasspublicstaticvoidsetUpBeforeClass()throwsException{ //準備注冊功能所需的原本來自于用戶注冊頁面的數(shù)據(jù) ApplicationContextact=newClassPathXmlApplicationContext("beans.xml"); registerAction=(RegisterAction)act.getBean("registerAction"); registerAction.setName("zs"); registerAction.setUsername("張三"); registerAction.setPass("111111"); registerAction.setLove(newString[]{"影視娛樂","棋牌娛樂"}); registerAction.setAge("20"); registerAction.setSex("男"); registerAction.setProvince("重慶"); registerAction.setBirth(newDate()); registerAction.setMobile("12345678901"); registerAction.setEmail("zs@");}編寫測試方法在RegisterActionTest中創(chuàng)建成員方法executeTest,并標注為@test,使用junit工具的斷言類(Assert)的assertTrue方法來測試registerAction對象的regist方法試執(zhí)行是否正確。關(guān)鍵代碼如下:@TestpublicvoidexecuteTest(){ //使用junit工具的斷言類(Assert)的assertTrue方法來測試執(zhí)行是否正確。 Assert.assertTrue("success".equals(registerAction.regist()));}執(zhí)行Junit測試執(zhí)行測試類RegisterActionTest,測試通過如圖5.1-h所示,測試失敗如圖5.1-i所示。圖5.1-h顯示測試成功結(jié)果5.1-i顯示可能測試失敗的結(jié)果根據(jù)任務(wù)提出問題(45-55分鐘)測試是什么?junit是什么?為什么要使用junit來進行測試?如何使用junit?問題解析(45-55分鐘)測試是什么?這里談的測試是軟件測試。那么軟件測試是干什么呢?簡單來說,軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行軟件系統(tǒng)和程序的過程。具體來說,軟件測試是根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計出一批測試用例,并利用測試用例來運行程序,以發(fā)現(xiàn)程序錯誤的過程。軟件測試可以使用人工或自動的手段來運行或測定某個系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或是弄清預期結(jié)果與實際結(jié)果之間的差別。軟件測試的目的——基于不同的立場,存在著兩種完全不同的測試目的。從用戶的角度來說,軟件測試目的在于:希望測試成為表明軟件產(chǎn)品中不存在錯誤的過程,驗證該軟件已正確地實現(xiàn)了用戶的要求,確立人們對軟件質(zhì)量的信心。從測試員的角度來說,測試是程序的執(zhí)行過程,目的在于發(fā)現(xiàn)錯誤。一個好的測試用例在于能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯誤,一個成功的測試在于發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯誤。軟件測試的目的——狹義上講,是為了發(fā)現(xiàn)軟件中的錯誤(挑毛?。?;從廣義上講:是為了檢驗軟件是否滿足規(guī)定的需求或是弄清預期結(jié)果與實際結(jié)果之間的差別——缺陷(不滿足需求、有差別)。軟件測試的一般原則——軟件測試的原則尚沒有標準的說法,大多是經(jīng)驗之談,一般有下面幾條可作為測試的基本原則:所有的測試都應追溯到用戶需求。應當把“盡早地和不斷地進行軟件測試”作為軟件測試者的座右銘。設(shè)計時應完成測試計劃,詳細的測試用例定義可在設(shè)計模型確定后開始,測試可在代碼產(chǎn)生之前進行計劃和設(shè)計。pareto(80/20)原則:測試發(fā)現(xiàn)的錯誤中80%很可能起源于20%的模塊中。應孤立這些疑點模塊,進行重點測試。完全測試是不可能的,測試需要終止。應(盡可能)由獨立的第三方來構(gòu)造測試。充分注意測試中的群集現(xiàn)象。要盡量避免測試的隨意性。兼顧合理的輸入和不合理的輸入數(shù)據(jù)。程序修改后要回歸測試應長期保留和維護測試用例,直至系統(tǒng)廢棄。軟件測試的一般過程——單元測試、集成測試、有效性測試、系統(tǒng)測試。單元測試:又稱模塊測試。每個程序模塊完成一個相對獨立的子功能,所以可以對該模塊進行單獨的測試。由于每個模塊都有清晰定義的功能,所以通常比較容易設(shè)計相應的測試方案,以檢驗每個模塊的正確性。集成測試:在單元測試完成后進行,要考慮將模塊集成為系統(tǒng)的過程中可能出現(xiàn)的問題,例如,模塊之間的通信和協(xié)調(diào)問題,所以在單元測試結(jié)束之后還要進行集成測試。這個步驟著重測試模塊間的接口,子功能的組合是否達到了預期要求的功能,全程數(shù)據(jù)結(jié)構(gòu)是否有問題等。有效性測試:集成測試通過后,應在用戶的參與下進行有效性測試。這個時候往往使用實際數(shù)據(jù)進行測試,從而驗證系統(tǒng)是否能滿足用戶的實際需要。系統(tǒng)測試:是把通過有效性測試的軟件,作為基于計算機系統(tǒng)的一個整體元素,與整個系統(tǒng)的其他元素結(jié)合起來,在實際運行環(huán)境下,對計算機系統(tǒng)進行一系列的集成測試和有效性測試。軟件測試過程模型——就像軟件開發(fā)有過程模型一樣,測試也有測試模型。測試模型用來描述軟件測試的整個過程。最具有代表意義的測試模型稱為V模型,如圖5.1-a所示。V模型是最具有代表意義的測試模型,它是軟件開發(fā)瀑布模型的變種,它反映了測試活動與分析和設(shè)計的關(guān)系。V模型從左到右,描述了基本的開發(fā)過程和測試行為,非常明確地標明了測試過程中存在的不同級別,并且清楚地描述了這些測試階段和開發(fā)過程期間各階段的對應關(guān)系。箭頭代表了時間方向,左邊下降的是開發(fā)過程各階段,與此相對應的是右邊上升的部分,即各測試過程的各個階段。圖5.1-a軟件測試V模型junit是什么?JUnit是一個非常優(yōu)秀的開源測試框架,使用它可以對Java大部分程序進行測試。它最先由ErichGamma和KentBeck編寫,是進行單元測試框架的xUnit體系結(jié)構(gòu)的一個實例。簡言之,junit就是一個單元測試工具。JUnit的主要特點如下:使用斷言判斷期望值和實際值的差異,返回boolean值。測試驅(qū)動設(shè)備使用共同的初始化變量或?qū)嵗?。測試包結(jié)構(gòu)便于組織后集成運行。有命令行和字符測試程序。JUnit框架包括主要組件:TestCase:對測試目標進行測試的方法與過程集合。TestSuite:測試用例的集合,可以容納多個測試用例。TestResult:測試結(jié)果的描述與記錄。TestListener:測試過程中的事件監(jiān)聽器。TestFailure:每一個測試方法所發(fā)生的與預期不一致狀況的描述。JUnit中常用接口和類:運行測試和收集測試結(jié)果類——Test接口定義測試中的固定方法——TestCase抽象類一系列斷言方法的集合——Assert靜態(tài)類,其中提供兩個重要靜態(tài)方法:assertEquals(Objectexpected,Objectactual):判斷兩個對象的內(nèi)部內(nèi)容是否相同;assertSame(Objectexpected,Objectactual):判斷兩個對象的引用是否相同。為什么要使用junit來進行測試?軟件測試是保證軟件質(zhì)量的重要手段,它在整個軟件開發(fā)過程中占據(jù)了將近一半的時間和資源。在軟件測試過程中合理的引入測試工具,能夠加快測試進度,提高測試質(zhì)量,實現(xiàn)更快、更好的開發(fā)軟件產(chǎn)品的目標。在測試過程中引入測試工具能給我們帶來諸多好處。提高工作效率——這是引入測試工具給我們帶來的一個顯著好處。那些固定的、重復性的工作,可以由測試工具來完成,這樣就使得測試人員能有更多的時間來計劃測試過程,設(shè)計測試用例,使測試進行的更加完善。保證測試的準確性——測試是需要投入大量的時間和精力的,人工進行測試時,經(jīng)常會犯一些人為的錯誤,而工具的特點恰恰能保證測試的準確性,防止人為疏忽造成的錯誤。執(zhí)行困難的測試工作——有一些測試工作,人工進行是很困難的。有的是因為進行起來較為復雜,有的是因為測試環(huán)境難以實現(xiàn)。測試工具可以執(zhí)行一些通過手工難于執(zhí)行,或者是無法執(zhí)行的測試。測試工具的應用范圍——現(xiàn)在的測試工具很多,基本上覆蓋了各個測試階段。按照工具所完成的任務(wù),可以分為以下幾大類:測試設(shè)計工具、靜態(tài)分析工具、單元測試工具、功能測試工具、性能測試工具、測試過程管理工具、缺陷管理工具。為什么要使用單元測試工具——在軟件產(chǎn)品的各個測試階段,通過測試發(fā)現(xiàn)了問題,開發(fā)人員就要對問題進行修正,修正后的軟件版本需要再次進行測試,以驗證問題是否得到解決,是否引發(fā)了新的問題,這個再次進行測試的過程,稱為回歸測試。由于軟件本身的特殊性,每次回歸測試都要對軟件進行全面的測試,以防止由于修改缺陷而引發(fā)新的缺陷。進行過回歸測試人都會深有體會,回歸測試的工作量是很大的,而且也很乏味,因為要將上一輪執(zhí)行過的測試原封不動的再執(zhí)行一遍。單元測試工具的實現(xiàn)思路——設(shè)想一下,如果能有一個機器人,就象播放錄影帶一樣,忠實的將上一輪執(zhí)行過的測試原封不動的在軟件新版本上重新執(zhí)行一遍,那就太好了。這樣做,一方面,能保證回歸測試的完整、全面性,測試人員也能有更多的時間來設(shè)計新的測試用例,從而提高測試質(zhì)量;另一方面,能縮短回歸測試所需要的時間,縮短軟件產(chǎn)品的面市時間。功能測試自動化工具就是一個能完成這項任務(wù)的軟件測試工具。功能測試自動化工具理論上可以應用在各個測試階段,但大多數(shù)情況下是在確認測試階段中使用。功能測試自動化工具的測試對象是那些擁有圖形用戶界面的應用程序。一個成熟的功能測試自動化工具要包括以下幾個基本功能:錄制和回放、檢驗、可編程。正確認識測試工具的作用——如果一個現(xiàn)在正在從事軟件測試工作,但在測試過程中還沒有使用過測試工具的人看到以上的這些內(nèi)容,可能會非常興奮,因為他覺的只要在測試過程中引入相關(guān)的測試工具,那些一直困擾他們測試團隊的問題就都能輕松解決了。在業(yè)內(nèi)經(jīng)常會有這種想法,認為通過引入一種新的技術(shù),就能解決面臨的所有問題了。這種想法,忽視了除技術(shù)以外我們?nèi)匀恍枰龅墓ぷ?。軟件測試工具確實能提高測試的效率和質(zhì)量,但它并不是能夠解決一切問題的靈丹妙藥。軟件測試工具能在測試過程中發(fā)揮多大的作用,取決于測試過程的管理水平和人員的技術(shù)水平。測試過程的管理水平和人員的技術(shù)水平都是人的因素,是一個開發(fā)組織不斷改進,長期積累的結(jié)果。如果一個測試組織的測試過程管理很混亂,人員缺乏經(jīng)驗,那么不必忙于引入各種測試工具,這時首先應該做的是改進測試過程,提高測試人員的技術(shù)水平,待達到一定程度后,再根據(jù)情況逐步的引入測試工具,進一步的改善測試過程,提高測試效率和質(zhì)量。Jnit正是一款針對java語言編寫的程序的自動化單元測試工具。如何使用junit?首先,引入junit的jar包。在java應用主流開發(fā)平臺上,一般對JUnit有較好的支持??梢詫雖yeclipse中自帶的junit的3.x或4.x的jar包,或從官方網(wǎng)站上下載最新的jar包(參考網(wǎng)址:/KentBeck/junit/downloads,如圖5.1-b所示),將其拷貝到web-inf目錄的lib目錄下(如圖5.1-c所示)。圖5.1-b下載junit測試工具圖5.1-c添加junit-4.10.jar文件到類路徑接下來,我們通過例子來說明junit如何使用?!纠?-1a】用junit測試計算器類Calculator的每個方法是否正確。在類Calculator中有add()方法,實現(xiàn)兩個整數(shù)之和;sub()方法實現(xiàn)兩個整數(shù)之差;mult()方法實現(xiàn)兩個整數(shù)之積;div()方法實現(xiàn)兩個整數(shù)之商。源代碼如下:publicclassCalculator{//實現(xiàn)兩個整數(shù)和的功能 publicintadd(inta,intb){ returna+b; } //實現(xiàn)兩個整數(shù)之差得功能publicintsub(inta,intb){ returna-b; } //實現(xiàn)兩個整數(shù)乘積的功能publicintmult(inta,intb){ returna*b; } //實現(xiàn)兩個整數(shù)的商的功能 publicintdiv(inta,intb)throwsException{ if(b==0){ thrownewException(); } returna/b; }}步驟1:在myelipse開發(fā)環(huán)境下,右鍵點擊源文件Calculator.java,選擇菜單項New->Other->Junit->JunitTestCase,彈出對話框如圖5.1-d所示。圖5.1-d定義一個測試類步驟2:在圖5.1-d所示對話框里,選擇NewJUnit4test單選按鈕,填寫測試類的包名cn.zdsoft.JUnit,填寫測試類的名字CalculatorTest,填寫將要測試的類全限名cn.zdsoft.junit.Calculator,如完成測試用例測試用具的初始化和清理,選擇復選框setUpBeforeClass()和tearDown()方法,點擊Finish按鈕,在項目的com.zdsoft.junit包下就生成了CalculatorTest.java文件。在類中靜態(tài)導入Assert類的方法,在測試用例中可以使用斷言方法,比如:assertEquals(Objectexpected,Objectactual),判斷方法中兩個對象的內(nèi)容是否相同。導入After類、Before和Test,在測試中可以使用@BeforeClass注解方法,在測試前完成測試環(huán)境的初始化;使用@After注解方法,在測試后完成資源的清理工作;用@Test注解方法,表示此方法是一個測試用例。關(guān)鍵代碼如下:packagecn.zdsoft.junit;importstaticorg.junit.Assert.*;importorg.junit.After;importorg.junit.Before;importorg.junit.Test;publicclassCalculatorTest{ @BeforeClass publicvoidsetUpBeforeClass()throwsException{ } @After publicvoidtearDown()throwsException{ }}步驟3:修改類CalculatorTest,為Calculator類的每個成員方法添加對應的測試方法,相應測試方法是add()、sub()、mult()和div(),在這些方法頭前添加注解@Test,表示它們都是一個測試用例。其關(guān)鍵代碼如下:@Testpublicvoidadd(){ Calculatorc=newCalculator(); inta=25,b=5; assertTrue(30==c.add(a,b));}@Testpublicvoidsub(){ Calculatorc=newCalculator(); inta=25,b=5; assertEquals(20,c.sub(a,b));}@Testpublicvoidmult(){ Calculatorc=newCalculator(); inta=25,b=5; assertEquals(125,c.mult(a,b));}@Testpublicvoiddiv(){ Calculatorc=newCalculator(); inta=25,b=5; assertEquals(5,c.div(a,b));} 代碼說明:在add()方法中,首先創(chuàng)建一個Calculator對象,然后給a、b賦初值,最后使用jnit測試工具中的assertEquals()方法調(diào)用Calculator對象的add方法來測試期望值和實際值是否相等(測試的結(jié)果——成功或失敗將會輸出在控制臺),從而完成對add方法的測試。其他三個方法的測試與add()類似。另外,仔細觀察上述代碼會發(fā)現(xiàn),在每個測試方法里有兩行相同代碼(能不能優(yōu)化呢?):Calculatorc=newCalculator();inta=25,b=5;步驟4:使用Junit測試工具提供的注解@BeforeClass實現(xiàn)測試的初始化工作。在測試類CalculatorTest中新增一個測試初始化的setUpBeforeClass()方法,將上述每個測試方法的相同代碼加入進去,并在該方法前標注為@BeforeClass。修改后的測試類CalculatorTest的關(guān)鍵代碼如下:publicclassCalculatorTest{ Calculatorc; inta,b;@BeforeClass publicvoidsetUpBeforeClass()throwsException{ c=newCalculator(); a=25; b=5;} @Test publicvoidadd(){ assertTrue(30==c.add(a,b)); } @Test publicvoidsub(){ assertEquals(20,c.sub(a,b)); } @Test publicvoidmult(){ assertEqauls(125,c.mult(a,b))}@Testpublicvoiddiv(){ assertEquals(5,c.div(a,b))}}代碼說明:使用@BeforeClass標注的setUpBeforeClass()方法是用來為測試進行初始化工作的,方法名setUpBeforeClass是關(guān)鍵字不能更改。在jnit工具對測試類CalculatorTest進行測試的時候,@BeforeClass標注的setUpBeforeClass方法將會首先運行,然后再運行標注有@Test的方法。步驟5:使用jnit工具執(zhí)行測試。在方法列表中右鍵選擇要測試的add()方法,在彈出菜單中選擇RunAs->JunitTest。測試結(jié)果如圖5.1-e所示:圖5.1-eadd()方法測試結(jié)果結(jié)果說明:圖5.1-e中的綠條表示測試通過,如果測試失敗用紅條表示。在綠條上面Runs表示測試用例數(shù)目,Errors表示測試用例錯誤數(shù)目。JUnit支持在一個類中多個測試方法一起測試,只需右擊擁有多個測試用例類名,RunAs->JUnitTest,就可以了,以Calculator為例,出現(xiàn)如圖5.1-f所示運行結(jié)果。圖中顯示Runs:4/4,表示對Calculator測試用例的4個方法進行測試,4個通過。圖5.1-f同一個類中多個方法一起測試JUnit也支持多個測試類一起測試,需要用到@RunWith和@SuiteClasses。其中用@RunWith注解類,JUnit以測試套件方式測試該測試套件中包含的所有用例;@SuiteClasses指定測試套件包含測試類集合。為了學習測試套件的使用,下面看看例子5-1b?!纠?-1b】在編寫了例子5.1-a中的測試類CalculatorTest的基礎(chǔ)上再編寫一個測試類SimpleTest。使用jnit的測試套件讓兩個類一起測試。步驟0:完成例子5.1-a。步驟1:編寫測試類SimpleTest。首先,在SimpleTest中定義一個成員變量emptyList,代碼如下:privatejava.util.ListemptyList;其次,定義一個有@BeforeClass注解的setUpBeforeClass()方法,實現(xiàn)測試用具的初始化。關(guān)鍵代碼:@BeforeClass publicvoidsetUpBeforeClass(){ emptyList=newjava.util.ArrayList(); }再次,定義一個

溫馨提示

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

評論

0/150

提交評論