軟件測(cè)試教學(xué)PPT課件
軟件測(cè)試教學(xué)PPT課件,軟件測(cè)試,教學(xué)PPT課件,軟件,測(cè)試,教學(xué),PPT,課件
國(guó)家教學(xué)資源庫(kù)建設(shè)項(xiàng)目國(guó)家教學(xué)資源庫(kù)建設(shè)項(xiàng)目單元4 單元測(cè)試 自動(dòng)售貨機(jī)的測(cè)試 主講人主講人 查英華查英華南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試學(xué)習(xí)導(dǎo)航學(xué)習(xí)導(dǎo)航2南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試引例描述引例描述v自動(dòng)售貨機(jī)是一種能根據(jù)投入的錢幣自動(dòng)付貨的機(jī)器。v本項(xiàng)目使用的是一個(gè)模擬飲料售貨機(jī)的Java實(shí)例該實(shí)例接收輸入的錢幣,通過(guò)判斷投入的是5角或1元的硬幣,選擇橙汁或牛奶,則相應(yīng)的飲料就會(huì)送出來(lái)。若售貨機(jī)沒有零錢找,則顯示零錢找完,這是再投入1元硬幣并選擇飲料后,飲料不送出來(lái)而且1元硬幣也退出。若有零錢找,在送出飲料的同時(shí)退還5角硬幣。3南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試教學(xué)目標(biāo)教學(xué)目標(biāo)能力目標(biāo)知識(shí)目標(biāo)u理解單元測(cè)試的概念uJUnit基本概念uJUnit基本框架素質(zhì)目標(biāo)p團(tuán)隊(duì)協(xié)作精神p分析問題的能力p溝通能力u會(huì)在Eclipse安裝JUnitu會(huì)用JUnit編寫簡(jiǎn)單的測(cè)試用例u會(huì)用測(cè)試套件組合測(cè)試用例4南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)分解任務(wù)分解使用JUnit測(cè)試簡(jiǎn)單JAVA程序任務(wù)一任務(wù)一任務(wù)二任務(wù)二使用JUnit測(cè)試自動(dòng)售貨機(jī)程序5南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)執(zhí)行的步驟任務(wù)執(zhí)行的步驟612345知知知知識(shí)識(shí)識(shí)識(shí)準(zhǔn)準(zhǔn)準(zhǔn)準(zhǔn)備備備備任任任任務(wù)務(wù)務(wù)務(wù)實(shí)實(shí)實(shí)實(shí)施施施施任任任任務(wù)務(wù)務(wù)務(wù)拓拓拓拓展展展展項(xiàng)項(xiàng)項(xiàng)項(xiàng)目目目目實(shí)實(shí)實(shí)實(shí)訓(xùn)訓(xùn)訓(xùn)訓(xùn)任任任任務(wù)務(wù)務(wù)務(wù)陳陳陳陳述述述述南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)一任務(wù)一 使用使用JUnit測(cè)試簡(jiǎn)單測(cè)試簡(jiǎn)單Java程序程序v任務(wù)簡(jiǎn)介對(duì)一個(gè)簡(jiǎn)單計(jì)算器的加、減、乘、除的功能進(jìn)行單元測(cè)試v任務(wù)目標(biāo)了解單元測(cè)試的基本概念了解單元測(cè)試的方法及工具JUnit的安裝使用Eclipse和JUnit進(jìn)行簡(jiǎn)單測(cè)試用例編寫的過(guò)程7南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)一任務(wù)一 使用使用JUnit測(cè)試簡(jiǎn)單測(cè)試簡(jiǎn)單Java程序程序v任務(wù)分析單元測(cè)試是軟件測(cè)試的基礎(chǔ),單元測(cè)試的效果會(huì)直接影響到軟件的后期測(cè)試JUnit是Java單元測(cè)試框架的事實(shí)標(biāo)準(zhǔn)8南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試知識(shí)準(zhǔn)備知識(shí)準(zhǔn)備v單元測(cè)試的基本概念什么是單元測(cè)試為什么要進(jìn)行單元測(cè)試如何進(jìn)行單元測(cè)試vJUnit的基本應(yīng)用JUnit的簡(jiǎn)介JUnit的下載和安裝JUnit的簡(jiǎn)單應(yīng)用9南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試單元測(cè)試的基本概念單元測(cè)試的基本概念對(duì)一個(gè)獨(dú)立工作單元的測(cè)試,java中通常是對(duì)一個(gè)類或方法的測(cè)試 目的目的檢查方法的行為是否滿足約定 功能功能查找代碼最簡(jiǎn)單的錯(cuò)誤,幫助確定系統(tǒng)需求 定義定義10南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試單元測(cè)試的必要性單元測(cè)試的必要性11南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試單元測(cè)試代碼的原則單元測(cè)試代碼的原則被測(cè)代碼宜于測(cè)試1.用接口分離外部依賴(依賴的接口以參數(shù)形式傳入)2.功能獨(dú)立、簡(jiǎn)潔,減少內(nèi)部依賴 3.根據(jù)自動(dòng)化單元測(cè)試工具的特點(diǎn) 單元測(cè)試代碼測(cè)試代碼易于測(cè)試1.足夠簡(jiǎn)單,保證自身的正確性,盡量少繼承、重載 2.命名清晰、準(zhǔn)確,減少歧義3.保存成果,重復(fù)利用 12南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit簡(jiǎn)介簡(jiǎn)介v一個(gè)自動(dòng)測(cè)試的框架v編寫者:Erich Gamma 和 Kent BeckErich Gamma:設(shè)計(jì)模式的作者之一Kent Beck:極限編程的創(chuàng)始人v開放源碼v支持語(yǔ)音:Java、C+、Perl、Python.v支持IDE:Eclipse、NetBeans.v網(wǎng)站:www.junit.org13南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit簡(jiǎn)介簡(jiǎn)介v測(cè)試階段劃分:?jiǎn)卧獪y(cè)試、集成測(cè)試、系統(tǒng)測(cè)試vJUnit適用于Java開發(fā)人員在單元測(cè)試階段,進(jìn)行單個(gè)方法實(shí)現(xiàn)功能或者類本身的測(cè)試vJUnit需要測(cè)試者自己編程,編寫的測(cè)試代碼必須滿足JUnit框架的要求v一般認(rèn)為,JUnit最適合XP(Extreme Programming:極限編程)開發(fā)14南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit簡(jiǎn)介簡(jiǎn)介vJUnit的特征使用斷言方法判斷期望值和實(shí)際值差異,返回Boolean值;測(cè)試驅(qū)動(dòng)設(shè)備使用共同的初始化變量或者實(shí)例;測(cè)試包結(jié)構(gòu)便于組織和集成運(yùn)行;支持圖形交互模式和文本交互模式。15南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit簡(jiǎn)介簡(jiǎn)介vJUnit的好處JUnit是公開源代碼的,可以進(jìn)行二次開發(fā),方便地對(duì)JUnit進(jìn)行擴(kuò)展??梢允箿y(cè)試代碼與產(chǎn)品代碼分開。針對(duì)某一個(gè)類的測(cè)試代碼通過(guò)較少的改動(dòng)便可以應(yīng)用于另一個(gè)類的測(cè)試。JUnit自動(dòng)檢測(cè)測(cè)試結(jié)果并且提供立即的反饋。易于集成到測(cè)試人員的構(gòu)建過(guò)程中,JUnit和Ant的結(jié)合可以實(shí)施增量開發(fā)。JUnit的測(cè)試包結(jié)構(gòu)便于組織和集成運(yùn)行。16南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit安裝安裝v下載安裝程序:www.junit.org并解包v增加junit.jar到CLASSPATH。例如:set classpath=.;junit3.8.1junit.jarv測(cè)試安裝成功與否?v勿將JUnit.jar 和JDK安裝到同一個(gè)目錄,否則可能找不到被測(cè)試類 17南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit的簡(jiǎn)單應(yīng)用的簡(jiǎn)單應(yīng)用v被測(cè)試案例:最簡(jiǎn)單計(jì)算器18南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit的簡(jiǎn)單應(yīng)用的簡(jiǎn)單應(yīng)用v一個(gè)簡(jiǎn)單計(jì)算器的測(cè)試代碼如下:19南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit的簡(jiǎn)單應(yīng)用的簡(jiǎn)單應(yīng)用v代碼解釋第1行,定義測(cè)試類所在的包。第2行,引入必須的jar包。第4行,定義一個(gè)測(cè)試類CalculatorTest。第5行,定義一個(gè)測(cè)試方法,每個(gè)測(cè)試方法都是一個(gè)函數(shù),都以test開頭。第6行,遵循對(duì)象測(cè)試的風(fēng)格,創(chuàng)建對(duì)象。第7行,測(cè)試Calculator的add的方法。第8行,比較調(diào)用add方法之后的返回值是否等于5。20南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit測(cè)試用例的基本結(jié)構(gòu)測(cè)試用例的基本結(jié)構(gòu)vJUnit一個(gè)測(cè)試用例對(duì)應(yīng)一個(gè)測(cè)試方法,即一個(gè)函數(shù)。要?jiǎng)?chuàng)建測(cè)試,必須編寫對(duì)應(yīng)的方法函數(shù)。vJUnit 3.x的測(cè)試方法必須以test開頭。v每個(gè)測(cè)試方法要做一些斷言,斷言主要用于比較實(shí)際結(jié)果與期望結(jié)果是否相符。21南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試運(yùn)行運(yùn)行JUnit用例用例v文本方式j(luò)ava-cp junit.jar;.junit.textui.TestRunner edu.niit.junit.demo.CalculatorTest22南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試運(yùn)行運(yùn)行JUnit用例用例vSwing方式j(luò)ava-cp junit.jar;.junit.swingui.TestRunner edu.niit.junit.demo.CalculatorTest23南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)實(shí)施任務(wù)實(shí)施v實(shí)現(xiàn)JUnit的下載與安裝v實(shí)現(xiàn)Eclipse編寫JUnit單元測(cè)試Eclipse引入JUnitJUnit測(cè)試用例編寫新建單元測(cè)試代碼目錄分別為這兩個(gè)功能編寫一個(gè)單元測(cè)試用例編寫測(cè)試用例查看運(yùn)行結(jié)果24南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)小結(jié)任務(wù)小結(jié)v單元測(cè)試是針對(duì)編碼的、最小單位測(cè)試。v單元測(cè)試由開發(fā)人員編寫,主要目的是驗(yàn)證開發(fā)人員的編碼是否符合預(yù)期值的結(jié)果,而不是證明編碼是否正確。vJUnit是xUnit系列單元測(cè)試框架的鼻祖,也是應(yīng)用最廣泛的Java單元測(cè)試框架。v使用JUnit測(cè)試的步驟為:編寫測(cè)試類并繼承TestCase類;編寫測(cè)試方法testXxxx();運(yùn)行TestRunner進(jìn)行測(cè)試。vEclipse開發(fā)工具集成了JUnit測(cè)試框架,可以幫助開發(fā)人員更快捷地編寫和運(yùn)行測(cè)試用例。25南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)拓展任務(wù)拓展v編寫數(shù)組求最大值和最小值的代碼的單元測(cè)試。v要求:定義一個(gè)ArrayUtil類定義兩個(gè)方法:max(int list)和min(int list)方法,求list中的最大值和最小值使用Eclipse和JUnit編寫單元測(cè)試用例,運(yùn)行測(cè)試用例,檢查用例編寫的正確性。26南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試項(xiàng)目實(shí)訓(xùn)項(xiàng)目實(shí)訓(xùn)v實(shí)訓(xùn)目的理解單元測(cè)試的基本概念理解手工編寫單元測(cè)試的基本方法;掌握使用Eclipse進(jìn)行單元測(cè)試的過(guò)程編寫簡(jiǎn)單的基于 JUnit的單元測(cè)試用例;v實(shí)訓(xùn)內(nèi)容根據(jù)所學(xué)內(nèi)容,編寫判斷日期字符串是否合法的應(yīng)用的測(cè)試用例并運(yùn)行之。27南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)二任務(wù)二任務(wù)二任務(wù)二 使用使用使用使用JUnitJUnit測(cè)試測(cè)試自動(dòng)售貨機(jī)程序自動(dòng)售貨機(jī)程序自動(dòng)售貨機(jī)程序自動(dòng)售貨機(jī)程序v任務(wù)簡(jiǎn)介自動(dòng)售貨機(jī)是一種能根據(jù)投入的錢幣自動(dòng)付貨的機(jī)器。本任務(wù)使用的是一個(gè)模擬飲料售貨機(jī)的Java實(shí)例,該實(shí)例接收輸入的錢幣,通過(guò)判斷投入的是5角或1元的硬幣,選擇橙汁或牛奶,則相應(yīng)的飲料就會(huì)送出來(lái)。若售貨機(jī)沒有零錢找,則顯示零錢找完,這是再投入1元硬幣并選擇飲料后,飲料不送出來(lái)而且1元硬幣也退出。若有零錢找,在送出飲料的同時(shí)退還5角硬幣。28南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)二任務(wù)二 使用使用JUnit測(cè)試自動(dòng)售貨機(jī)程序測(cè)試自動(dòng)售貨機(jī)程序v任務(wù)陳述利用經(jīng)典的自動(dòng)售貨機(jī)案例,完成JUnit 3和JUnit 4的測(cè)試用例的編寫JUnit的測(cè)試框架和核心類:TestCase、TestSuite、TestRunner和Assert,以及它們?nèi)绾喂餐ぷ?,完成測(cè)試用例的編寫和運(yùn)行。通過(guò)對(duì)JUnit 3的測(cè)試用例的改造,充分理解JUnit 4的注解的應(yīng)用。29南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)二任務(wù)二 使用使用JUnit測(cè)試自動(dòng)售貨機(jī)程序測(cè)試自動(dòng)售貨機(jī)程序v任務(wù)分析深入理解JUnit的測(cè)試框架結(jié)構(gòu),及其它的核心類庫(kù)。在理解JUnit 3的框架結(jié)構(gòu)的基礎(chǔ)上,通過(guò)復(fù)習(xí)Java 5的注解特性,進(jìn)一步理解JUnit 4利用注解給編寫單元測(cè)試帶來(lái)的便捷。學(xué)習(xí)JUnit 3和JUnit 4的測(cè)試框架需要以Java的對(duì)象、接口、注解等相關(guān)知識(shí)為基礎(chǔ)。30南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試知識(shí)準(zhǔn)備知識(shí)準(zhǔn)備vJUnit核心類與接口JUnit的核心類:TestCase、TestSuite、TestRunnerJUnit的其他接口TestCasevAssert斷言vJUnit測(cè)試套件v探究JUnit 4常用注解測(cè)試套件參數(shù)化測(cè)試31南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit測(cè)試框架測(cè)試框架32南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit核心類及接口核心類及接口v其中:斜體的為接口類/接口責(zé) 任Assert當(dāng)條件成立時(shí)assert方法保持沉默,不成立拋出異常TestResultTestResult包含了測(cè)試中發(fā)生的所有錯(cuò)誤或失敗Test可以運(yùn)行Test并把結(jié)果傳遞給TestResultTestListener測(cè)試中若產(chǎn)生事件(開始、結(jié)束、錯(cuò)誤、失敗)會(huì)通知TestListenerTestCase定義了可以用于運(yùn)行多項(xiàng)測(cè)試的環(huán)境(或者說(shuō)固定設(shè)備)TestSuite運(yùn)行一組test case(它們可能包含其他test suite),它是Test的組合BaseTestRunnerTest runner是用來(lái)啟動(dòng)測(cè)試的用戶界面,BaseTestRunner是所有test runner的超類33南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試探索探索JUnit核心核心TestSuiteTestCaseTestRunnerTestResult34南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試探索探索JUnit核心核心vTestCase(測(cè)試用例)擴(kuò)展了Junit的TestCase類,它以testXXX()方法的形式包含一個(gè)或多個(gè)測(cè)試。vTestSuite(測(cè)試集合)一個(gè)TestSuite把多組相關(guān)測(cè)試歸入一組測(cè)試中的便捷方式。vTestRunner(測(cè)試運(yùn)行器)執(zhí)行test Suite的程序。v當(dāng)需要多個(gè)TestCase時(shí),可以創(chuàng)建更多的TestCase對(duì)象。v當(dāng)需要一次執(zhí)行多個(gè)TestCase對(duì)象時(shí),可以創(chuàng)建TestSuite對(duì)象v為了執(zhí)行TestSuite對(duì)象,需要使用TestRunner對(duì)象。35南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit的其它接口的其它接口vTest接口Test接口是 TestCase、TestSuite 的父接口,用于運(yùn)行測(cè)試和收集測(cè)試結(jié)果。該接口使用了composite設(shè)計(jì)模式。它的run(TestResult result)用來(lái)運(yùn)行 Test,并且將結(jié)果保存到 TestResult。vTestResult類TestResult類收集TestCase的執(zhí)行結(jié)果,報(bào)告測(cè)試結(jié)果。若測(cè)試成功,那么TestResult代碼是干凈的,進(jìn)度條就是綠色顯示,否則,TestResult就會(huì)報(bào)告失敗,并輸出失敗測(cè)試的數(shù)目和它的stack trace。vTestListener接口TestRunner實(shí)現(xiàn)了TestListener。雖然TestListener接口是JUnit框架的重要部分,但是你編寫自己的測(cè)試時(shí)不必實(shí)現(xiàn)這個(gè)接口。36南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試TestCasev把具有公共行為的測(cè)試歸入一組v擴(kuò)展了JUnit的TestCase類的類。它以testXXX方法的形式包含一個(gè)或多個(gè)測(cè)試v典型的TestCase包含兩個(gè)主要部件fixture單元測(cè)試vTestCase生命周期37南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試TestCasevFixture管理資源,復(fù)用配置代碼運(yùn)行一個(gè)或多個(gè)測(cè)試所需的公用資源或者數(shù)據(jù)集合TestCase通過(guò)setUp和tearDown方法來(lái)創(chuàng)建和銷毀fixture 典型應(yīng)用數(shù)據(jù)庫(kù)連接,生成輸入文件v創(chuàng)建單元測(cè)試方法繼承自TestCase的一組assert方法封裝了最常見的測(cè)試任務(wù),這些assert方法可以極大地簡(jiǎn)化單元測(cè)試的編寫38南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試TestCasevTestCase除了Assert之外成員方法方法描述countTestCase計(jì)算run()所執(zhí)行的TestCase的數(shù)目createResult創(chuàng)建默認(rèn)的TestResult對(duì)象getName獲得TestCase的名字run運(yùn)行TestCase并收集TestResult中的結(jié)果runBare運(yùn)行測(cè)試序列(比如自動(dòng)發(fā)現(xiàn)test方法)runTest重載以運(yùn)行測(cè)試并斷言其狀態(tài)setName設(shè)置TestCase的名字setUp初始化資源配置tearDown清除資源配置toString返回TestCase的字符串表示39南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試Assert斷言斷言vAssert是JUnit框架的一個(gè)靜態(tài)類,包含一組靜態(tài)的測(cè)試方法,用于期望值和實(shí)際值比較是否正確。方 法描 述assertTrue斷言條件為真。若不滿足,方法拋出AssertionFailedError異常。assertFalse斷言條件為假。若不滿足,方法拋出AssertionFailedError異常。assertEquals斷言兩個(gè)對(duì)象相等。若不滿足,方法拋出AssertionFailedError異常。assertNotNull斷言對(duì)象不為null。若不滿足,方法拋出AssertionFailedError異常。assertNull斷言對(duì)象為null。若不滿足,方法拋出AssertionFailedError異常。assertSame斷言兩個(gè)引用指向同一個(gè)對(duì)象。若不滿足,方法拋出AssertionFailedError異常。assertNotSame斷言兩個(gè)引用指向不同的對(duì)象。若不滿足,方法拋出AssertionFailedError異常。fail強(qiáng)制測(cè)試失敗,并給出指定信息。40南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit和異常和異常v對(duì)測(cè)試而言,下面兩種異常我們可能會(huì)感興趣:從測(cè)試代碼拋出的可預(yù)測(cè)異常。由于某個(gè)某塊(或代碼)發(fā)生嚴(yán)重錯(cuò)誤,而拋出的不可預(yù)測(cè)異常。v如有一個(gè)名為sortMyList()的方法,如果傳入?yún)?shù)是一個(gè)nulllist,那么我們希望該方法拋出一個(gè)異常。在這種情況下,我們就需要顯式地測(cè)試這一點(diǎn)。assertTure(true)表示我預(yù)期控制流程會(huì)達(dá)到這個(gè)地方。JUnit可以捕獲任何異常,并且把它報(bào)告為一個(gè)錯(cuò)誤。JUnit不只是讓一個(gè)斷言失敗,而是能夠跟蹤整個(gè)堆棧,并且報(bào)告bug的堆棧調(diào)用順序,當(dāng)你需要查找一個(gè)失敗測(cè)試的原因時(shí),這將非常有用。41南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit和異常和異常public class TestException extends TestCase public void testForException()trysortMyList(null);fail(需要拋出一個(gè)異常!);catch(RuntimeException e)assertTrue(true);fail()的使用場(chǎng)合:編寫每個(gè)測(cè)試用例時(shí),以失敗作為開始,提醒開發(fā)人員該單元測(cè)試未實(shí)現(xiàn);測(cè)試?yán)馐欠癜l(fā)生。42南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試TestSuite套件套件vtest suite是把多個(gè)相關(guān)測(cè)試歸入一組便捷方式v若你沒有提供自己的TestSuite,test runner會(huì)自動(dòng)創(chuàng)建一個(gè) v缺省的TestSuite 不能滿足時(shí),可能會(huì)想組合多個(gè)suite,把它們作為主suite的一部分,這些suite來(lái)自幾個(gè)不同的packagev下面是一個(gè)典型的TestAll類:43南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試TestSuite處理測(cè)試用例的規(guī)則處理測(cè)試用例的規(guī)則v測(cè)試用例必須是公有類(public);v測(cè)試用例必須繼承于TestCase類;v測(cè)試用例的測(cè)試方法必須是公有的(public);v測(cè)試用例的測(cè)試方法必須被聲明為void;v測(cè)試用例的測(cè)試方法的前置名詞必須是test;v測(cè)試用例的測(cè)試方法無(wú)任何傳遞參數(shù)。44南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit單元測(cè)試的步驟單元測(cè)試的步驟1.重載setUp(),封裝測(cè)試環(huán)境初始化及測(cè)試數(shù)據(jù)準(zhǔn)備2.設(shè)計(jì)測(cè)試方法,以testXXX命名3.在測(cè)試方法中使用斷言方法,如assertEquals(),assertTrue()等4.設(shè)計(jì)測(cè)試套件,或使用缺省的測(cè)試套件,調(diào)用TestRunner執(zhí)行測(cè)試腳本,生成測(cè)試結(jié)果5.重載tearDown()析構(gòu)測(cè)試環(huán)境,執(zhí)行收尾動(dòng)作45南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit 4.xvJunit 4.x利用java 5的annotation特性優(yōu)勢(shì),使得測(cè)試比起3.x版本更加方便簡(jiǎn)單。JUnit 3.xJUnit 4.x必須引入類junit.framework.TestCase必須引入org.junit.Test;org.junit.Assert.*;(static import)必須繼承類TestCase不需要測(cè)試方法必須以test開頭不需要,但必須加上Test注解通過(guò)assertXxxx()方法判斷結(jié)果46南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit 4.x 常用注解常用注解JUnit 4.xJUnit 3.x功能說(shuō)明Beforevoid setUp()初始化方法Aftervoid tearDowm()釋放資源Testvoid testXxxx()聲明測(cè)試方法BeforeClass無(wú)在所有測(cè)試方法執(zhí)行前執(zhí)行一次AfterClass無(wú)在所有測(cè)試方法執(zhí)行結(jié)束后執(zhí)行一次RunWith無(wú)指定測(cè)試運(yùn)行器SuiteClassesstatic Test suite()套件運(yùn)行器Ignore無(wú)忽略測(cè)試方法Parameter無(wú)參數(shù)化測(cè)試vJUnit 4.x的注解與JUnit 3.x的功能比較47南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit 4.xvJUnit 4.x的單元測(cè)試用例的執(zhí)行順序?yàn)椋築eforeClass Before Test After AfterClass;v每一個(gè)測(cè)試方法的調(diào)用順序?yàn)椋築efore Test After。48南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試測(cè)試運(yùn)行器和測(cè)試套件測(cè)試運(yùn)行器和測(cè)試套件vJUnit 4.x中所有的測(cè)試方法都由它負(fù)責(zé)執(zhí)行。v使用注解RunWith(XXX.class)v測(cè)試套件的寫法創(chuàng)建一個(gè)空類作為測(cè)試套件的入口使用注解RunWith和SuiteClasses修飾這個(gè)空類將org.junit.runners.Suite作為參數(shù)傳入注解RunWith,提示Junit為此類使用套件運(yùn)行器執(zhí)行將需要放入此測(cè)試套件的測(cè)試類組作為注解SuiteClasses的參數(shù)。保證這個(gè)空類使用public修飾,而且存在公開的不帶有任何參數(shù)的構(gòu)造函數(shù)。49南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試Runwith和和Suite示例示例import org.junit.runner.RunWith;import org.junit.runners.Suite;import org.junit.runners.Suite.SuiteClasses;/*使用Suite運(yùn)行器裝載測(cè)試集*指定若干個(gè)測(cè)試用例,組成一個(gè)測(cè)試集*測(cè)試集的執(zhí)行相當(dāng)于一起執(zhí)行被指定的測(cè)試用例*/RunWith(Suite.class)SuiteClasses(CalculatorTest.class,SaleMachineTest.class)public class AllTests /函數(shù)體是空的 50南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試參數(shù)化測(cè)試參數(shù)化測(cè)試 v例如:下面的功能代碼(格式化字符串):public class WordDealUtil public static String wordFormat4DB(String name)if(name=null)return null;Pattern p=Ppile(A-Z);Matcher m=p.matcher(name);StringBuffer sb=new StringBuffer();while(m.find()if(m.start()!=0)m.appendReplacement(sb,(_+m.group().toLowerCase();return m.appendTail(sb).toString().toLowerCase();51南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試參數(shù)化測(cè)試參數(shù)化測(cè)試v沒有使用參數(shù)化的測(cè)試用例代碼:public class WordDealUtilTest Test public void wordFormat4DBNull()/測(cè)試 null 時(shí)的處理情況 assertNull(WordDealUtil.wordFormat4DB(null);Test public void wordFormat4DBEmpty()/測(cè)試空字符串的處理情況 assertEquals(,WordDealUtil.wordFormat4DB();52南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試參數(shù)化測(cè)試參數(shù)化測(cè)試v使用參數(shù)化的測(cè)試用例代碼:SuppressWarnings(unchecked)RunWith(Parameterized.class)public class WordDealUtilTestWithParam private String expected;private String target;Parameters public static Collection words()return Arrays.asList(new Object employee_info,employeeInfo,null,null,employee_info,EmployeeInfo,employee_info_a,employeeInfoA,employee_a_info,employeeAInfo);53南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試參數(shù)化測(cè)試參數(shù)化測(cè)試/*參數(shù)化測(cè)試必須的構(gòu)造函數(shù) *param expected 期望的測(cè)試結(jié)果,對(duì)應(yīng)參數(shù)集中的第一個(gè)參數(shù) *param target 測(cè)試數(shù)據(jù),對(duì)應(yīng)參數(shù)集中的第二個(gè)參數(shù) */public WordDealUtilTestWithParam(String expected,String target)this.expected=expected;this.target=target;/*測(cè)試將 Java 對(duì)象名稱到數(shù)據(jù)庫(kù)名稱的轉(zhuǎn)換 */Test public void wordFormat4DB()Assert.assertEquals(expected,WordDealUtil.wordFormat4DB(target);54南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試參數(shù)化測(cè)試參數(shù)化測(cè)試v在靜態(tài)方法 words 中,使用二維數(shù)組來(lái)構(gòu)建測(cè)試所需要的參數(shù)列表,其中每個(gè)數(shù)組中的元素的放置順序并沒有什么要求,只要和構(gòu)造函數(shù)中的順序保持一致就可以。v現(xiàn)在如果再增加一種測(cè)試情況,只需要在靜態(tài)方法 words 中添加相應(yīng)的數(shù)組即可,不再需要復(fù)制粘貼出一個(gè)新的方法出來(lái)了。v這種參數(shù)化的測(cè)試用例寫法,很適用于一些共用的功能方法。55南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試注意的問題注意的問題vJUnit將測(cè)試失敗的情況分為兩種:failure和error。failure一般由單元測(cè)試使用的斷言方法判斷失敗引起,它表示在測(cè)試點(diǎn)發(fā)現(xiàn)了問題;error則是由代碼異常引起,這是測(cè)試目的之外的發(fā)現(xiàn),它可能產(chǎn)生于測(cè)試代碼本身的錯(cuò)誤(測(cè)試代碼也是代碼,同樣無(wú)法保證完全沒有缺陷),也可能是被測(cè)試代碼中的一個(gè)隱藏的bug。藍(lán)色代表failure,紅色代表error。error如除數(shù)為0。v靜態(tài)包含(static),是JDK5中新增添的一個(gè)功能。使用靜態(tài)包含后,前面的類名就能省略,使用起來(lái)更加方便。import static org.junit.Assert.*;56南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試注意的問題注意的問題v每個(gè)測(cè)試類只能有一個(gè)方法被標(biāo)注為 BeforeClass 或 AfterClass,該方法必須是public和static的。vBefore和After標(biāo)注的方法必須是public void。v對(duì)于方法的聲明也有如下要求:名字可以隨便取,沒有任何限制返回值必須為 public void,而且不能有任何參數(shù)。如果違反這些規(guī)定,會(huì)在運(yùn)行時(shí)拋出一個(gè)異常。57南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit 最佳實(shí)踐(最佳實(shí)踐(1)1獨(dú)立:一個(gè)測(cè)試類,只測(cè)試一個(gè)對(duì)象;一個(gè)testxxx,只測(cè)試這個(gè)對(duì)象的一個(gè)方法,方便定位出錯(cuò)位置2易讀:給測(cè)試方法一個(gè)合適的名字,如果沒有better choice,測(cè)試類命名為XXXTest,測(cè)試方法testxxx3完備:測(cè)試所有可能引發(fā)錯(cuò)誤的地方,對(duì)于只含有g(shù)etter/setter的類,如果是由IDE產(chǎn)生的,才可不測(cè)58南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試JUnit 最佳實(shí)踐(最佳實(shí)踐(2)4絕緣:在setUp和tearDown中的代碼不應(yīng)該是與測(cè)試方法相關(guān)的,而應(yīng)該是全局相關(guān)的 5隔離:與被測(cè)代碼放相同的包不同的目錄。方便訪問被測(cè)試類的protected變量/方法,方便被測(cè)代碼管理與發(fā)布6小心:junit.jar最好不要放到/jre/lib/ext目錄59南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試 單元測(cè)試并不解決所有問題單元測(cè)試并不解決所有問題驗(yàn)收測(cè)試性能測(cè)試集成測(cè)試聯(lián)合測(cè)試單元測(cè)試測(cè)試編碼不息,測(cè)試不止60南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)實(shí)施任務(wù)實(shí)施v實(shí)現(xiàn)自動(dòng)售貨機(jī)的JUnit 3.8測(cè)試用例編寫案例分析編碼實(shí)現(xiàn)用例分析測(cè)試代碼測(cè)試結(jié)果v實(shí)現(xiàn)自動(dòng)售貨機(jī)的JUnit 4.x的測(cè)試用例編寫v實(shí)現(xiàn)測(cè)試套件管理測(cè)試用例61南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)小結(jié)任務(wù)小結(jié)vJUnit 3.x的測(cè)試框架的核心類包括:TestCase、TestSuite、TestRunner和Assert,其中TestCase用于創(chuàng)建單元測(cè)試方法,TestSuite用于組裝所有的測(cè)試用例,TestRunner是執(zhí)行test suite的運(yùn)行器,Assert斷言執(zhí)行測(cè)試任務(wù)。vJUnit 4.x充分利用Java 5的注解特性,使單元測(cè)試更為簡(jiǎn)單和易于擴(kuò)展。常用的注解包括:Test、Before、After、RunWith、SuiteClasses。62南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試任務(wù)拓展任務(wù)拓展v編寫堆棧類的入棧、出棧、刪除等方法的測(cè)試用例。v要求:定義一個(gè)MyStackImpl類實(shí)現(xiàn)MyStack接口編寫pop()、push()、delete()、isEmpty()和top()方法使用JUnit編寫單元測(cè)試用例運(yùn)行測(cè)試用例,檢查用例編寫的正確性。63南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試項(xiàng)目實(shí)訓(xùn)項(xiàng)目實(shí)訓(xùn)v實(shí)訓(xùn)目的理解編寫單元測(cè)試的基本方法;掌握使用Eclipse進(jìn)行單元測(cè)試的過(guò)程掌握J(rèn)Unit 的核心類、JUnit 生命周期。v實(shí)訓(xùn)內(nèi)容根據(jù)所學(xué)內(nèi)容,編寫堆棧類的入棧、出棧、刪除等方法的測(cè)試用例并運(yùn)行之。64南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試單元小結(jié)單元小結(jié)v單元測(cè)試是針對(duì)編碼的、最小單位測(cè)試,盡管它只是軟件測(cè)試的一種,卻是所有測(cè)試中非常重要的一種。單元測(cè)試由開發(fā)人員編寫,主要目的是驗(yàn)證開發(fā)人員的編碼是否符合預(yù)期值的結(jié)果,而不是證明編碼是否正確。vJUnit是xUnit系列單元測(cè)試框架的鼻祖,也是應(yīng)用最廣泛的Java單元測(cè)試框架,使用Eclipse開發(fā)工具可以幫助開發(fā)人員更快捷地編寫和運(yùn)行測(cè)試用例。v測(cè)試用例的設(shè)計(jì)和JUnit 4的使用是本單元的重點(diǎn)和難點(diǎn),課后應(yīng)多加練寫。65南京工業(yè)職業(yè)技術(shù)學(xué)院軟件測(cè)試軟件測(cè)試Q&A66國(guó)家教學(xué)資源庫(kù)建設(shè)項(xiàng)目國(guó)家教學(xué)資源庫(kù)建設(shè)項(xiàng)目再再 見見
收藏
編號(hào):66077335
類型:共享資源
大?。?span id="eoop5pf" class="font-tahoma">13.30MB
格式:ZIP
上傳時(shí)間:2022-03-26
25
積分
- 關(guān) 鍵 詞:
-
軟件測(cè)試
教學(xué)PPT課件
軟件
測(cè)試
教學(xué)
PPT
課件
- 資源描述:
-
軟件測(cè)試教學(xué)PPT課件,軟件測(cè)試,教學(xué)PPT課件,軟件,測(cè)試,教學(xué),PPT,課件
展開閱讀全文
- 溫馨提示:
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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學(xué)習(xí)交流,未經(jīng)上傳用戶書面授權(quán),請(qǐng)勿作他用。