




已閱讀5頁(yè),還剩12頁(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)介
第三章 JUnit單元測(cè)試實(shí)驗(yàn)1 開(kāi)始使用JUnit【實(shí)驗(yàn)?zāi)康摹?、 學(xué)習(xí)使用JUnit4.X進(jìn)行單元測(cè)試; 2、 掌握J(rèn)Unit4.X編寫(xiě)測(cè)試代碼的方法;3、 應(yīng)用JUnit進(jìn)行單元測(cè)試,掌握最佳實(shí)踐編寫(xiě)測(cè)試代碼?!緦?shí)驗(yàn)環(huán)境】1、 Windows環(huán)境,MyEclipse或Eclipse,JUnit4.x。2、 每個(gè)學(xué)生操作1臺(tái)電腦?!緦?shí)驗(yàn)原理】JUnit是一個(gè)開(kāi)源的Java編程語(yǔ)言的單元測(cè)試框架,最初由 Erich Gamma 和 Kent Beck 編寫(xiě)。Junit測(cè)試是一種白盒測(cè)試工具。JUnit是一套框架,繼承TestCase類(lèi),就可以用Junit進(jìn)行自動(dòng)測(cè)試了。具有JUnit經(jīng)驗(yàn)對(duì)于應(yīng)用“測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)”的程序開(kāi)發(fā)模型是非常重要的。JUnit本質(zhì)上是一套框架,即開(kāi)發(fā)者制定了一套條條框框,遵循這此條條框框要求編寫(xiě)測(cè)試代碼,如繼承某個(gè)類(lèi),實(shí)現(xiàn)某個(gè)接口,就可以用JUnit進(jìn)行自動(dòng)測(cè)試了。由于JUnit相對(duì)獨(dú)立于所編寫(xiě)的代碼,可以測(cè)試代碼的編寫(xiě)可以先于實(shí)現(xiàn)代碼的編寫(xiě),XP 中推崇的 test first design的實(shí)現(xiàn)有了現(xiàn)成的手段:用JUnit寫(xiě)測(cè)試代碼,寫(xiě)實(shí)現(xiàn)代碼,運(yùn)行測(cè)試,測(cè)試失敗,修改實(shí)現(xiàn)代碼,再運(yùn)行測(cè)試,直到測(cè)試成功。以后對(duì)代碼的修改和優(yōu)化,運(yùn)行測(cè)試成功,則修改成功。Java 下的 team 開(kāi)發(fā),采用 cvs(版本控制) + ant(項(xiàng)目管理) + JUnit (集成測(cè)試) 的模式時(shí),通過(guò)對(duì)ant的配置,可以很簡(jiǎn)單地實(shí)現(xiàn)測(cè)試自動(dòng)化?!緦?shí)驗(yàn)內(nèi)容】根據(jù)下面的實(shí)驗(yàn)步驟完成實(shí)驗(yàn)。1、 JUnit包下載。 (1) 從下載Junit,打開(kāi)該鏈接,會(huì)有一個(gè)下載鏈接,下載Junit4.X.zip,保存在用戶機(jī)的文件系統(tǒng)中。(2) 解包Junit-4.X,得到如圖3-1的解包文件。圖1 Junit解包文件表1 Junit文件說(shuō)明文件/目錄描 述junit.jarJUnit框架結(jié)構(gòu)、擴(kuò)展和測(cè)試運(yùn)行器的二進(jìn)制發(fā)布src.jarJUnit的源代碼,包括一個(gè) Ant 的buildfile文件junit是個(gè)目錄,內(nèi)有JUnit自帶的用JUnit編寫(xiě)的測(cè)試示例程序javadocJUnit完整的API文檔doc一些文檔和文章,包括“Test Infected: Programmers Love Writing Tests”和其它一些資料,可以幫助我們?nèi)腴T(mén)。(3) 配置(以JUnit4.8.2為例)。步驟如下: 右擊“我的電腦”-“屬性”-高級(jí)-環(huán)境變量; 在系統(tǒng)變量中選擇“CLASSPATH”(如果沒(méi)有則新建一個(gè),變量名CLASSPATH,變量值d:junit4.8.2junit-4.8.2.jar;d:junit4.8.2); 如果有CLASSPATH,將d:junit4.8.2junit-4.8.2.jar;d:junit4.8.2加入到變量值即可,多個(gè)中間需用;隔開(kāi)。圖2 Junit配置成功 (4) 檢驗(yàn):運(yùn)行中輸入cmd輸入命令:java org.junit.runner.JUnitCore org.junit.tests.AllTests配置成功,如圖2所示。2、 編寫(xiě)JUnit測(cè)試用例。使用JUnit 的最佳實(shí)踐:(1) 新建一個(gè)名為test的source folder,用于存放測(cè)試類(lèi)源代碼;(2) 目標(biāo)類(lèi)與測(cè)試類(lèi)應(yīng)該位于同一個(gè)包下面,這樣測(cè)試類(lèi)中就不必導(dǎo)入源代碼所在的包,因?yàn)樗麄兾挥谕粋€(gè)包下面;(3) 測(cè)試類(lèi)的命名規(guī)則:假如目標(biāo)類(lèi)是Calculator,那么測(cè)試類(lèi)應(yīng)該命名為T(mén)estCalculator或者是CalculatorTest。下面將以一個(gè)具體的實(shí)例進(jìn)行說(shuō)明。(1) 新建一Java Project。圖3 新建Java Project(2) 配置構(gòu)建路徑。圖4 配置構(gòu)建路徑 (3) Add Library-JUnit 4。圖5 Add Library圖6 選擇JUnit 4(1)圖7 選擇JUnit 4(2)(4) 建一個(gè)包c(diǎn)om.test 并在此包下建一個(gè)除法類(lèi):Divide。圖8 類(lèi)Divide Divide類(lèi)的程序源代碼如下所示:package com.test;public class Divide private static int result;public void divide(int num)result/=num;public int getResult()return result;public void setResult(int result)Divide.result=result;代碼編寫(xiě)完成后,進(jìn)行調(diào)試編譯,確保沒(méi)有語(yǔ)法錯(cuò)誤。 (5) 右鍵Divide類(lèi)。圖9 新建JUnit Test Case(1)圖10 新建JUnit Test Case(2)圖11 新建JUnit Test Case(3)MyEclipse會(huì)自動(dòng)為測(cè)試類(lèi)取名:被測(cè)試類(lèi)+Test,單擊Next就可以了。根據(jù)圖12選擇需要進(jìn)行測(cè)試的方法。注意:測(cè)試類(lèi)之所以使用“Test”開(kāi)頭或“Test”結(jié)尾,是為了更好的區(qū)分測(cè)試類(lèi)與被測(cè)試類(lèi)。圖12 選擇需要測(cè)試的方法(6) 創(chuàng)建測(cè)試用例。首先創(chuàng)建一個(gè)默認(rèn)的測(cè)試用例。圖13 產(chǎn)生默認(rèn)的測(cè)試用例 (7) 執(zhí)行測(cè)試用例。如圖14所示。測(cè)試結(jié)果:紅色,測(cè)試失敗。圖14 運(yùn)行測(cè)試用例圖15 測(cè)試結(jié)果 所有類(lèi)測(cè)試結(jié)果(8) 修改測(cè)試用例:DivideTest.java。具體代碼如圖16所示。新測(cè)試用例運(yùn)行后的測(cè)試結(jié)果如圖17所示。注意:測(cè)試方法必須使用注解 org.junit.Test 修飾。 測(cè)試方法必須使用 public void 修飾,而且不能帶有任何參數(shù)。測(cè)試方法在JUnit4.X中沒(méi)有要求,但是為了使得命名意義,一般推薦采用“test”+“被測(cè)試方法”的命名規(guī)則。assertEquals 是由 JUnit 提供的一系列判斷測(cè)試結(jié)果是否正確的靜態(tài)斷言方法(位于類(lèi) org.junit.Assert 中)之一,我們使用它將執(zhí)行結(jié)果 result 和預(yù)期值“result”進(jìn)行比較,來(lái)判斷測(cè)試是否成功。圖16 修改后的測(cè)試用例圖17 修改后的測(cè)試用例的測(cè)試結(jié)果綠色的進(jìn)度條提示我們,測(cè)試運(yùn)行通過(guò)了。但現(xiàn)在就宣布代碼通過(guò)了單元測(cè)試還為時(shí)過(guò)早。記?。耗愕膯卧獪y(cè)試代碼不是用來(lái)證明你是對(duì)的,而是為了證明你沒(méi)有錯(cuò)。因此單元測(cè)試的范圍要全面,比如對(duì)邊界值、正常值、錯(cuò)誤值得測(cè)試;對(duì)代碼可能出現(xiàn)的問(wèn)題要全面預(yù)測(cè),而這也正是需求分析、詳細(xì)設(shè)計(jì)環(huán)節(jié)中要考慮的。3、 應(yīng)用JUnit對(duì)類(lèi)WordDealUtil編寫(xiě)測(cè)試代碼。(1) 被測(cè)試程序說(shuō)明:對(duì)名稱(chēng)、地址等字符串格式的內(nèi)容進(jìn)行格式檢查。將Java對(duì)象名稱(chēng)(每個(gè)單詞的頭字母大寫(xiě))按照數(shù)據(jù)庫(kù)命名的習(xí)慣進(jìn)行格式化格式化后的數(shù)據(jù)為小寫(xiě)字母,并且使用下劃線分割命名單詞。import java.util.regex.Matcher;import java.util.regex.Pattern;/* * 對(duì)名稱(chēng)、地址等字符串格式的內(nèi)容進(jìn)行格式檢查 * 或者格式化的工具類(lèi) */public class WordDealUtil /* * 將Java對(duì)象名稱(chēng)(每個(gè)單詞的頭字母大寫(xiě))按照 * 數(shù)據(jù)庫(kù)命名的習(xí)慣進(jìn)行格式化 * 格式化后的數(shù)據(jù)為小寫(xiě)字母,并且使用下劃線分割命名單詞 * 例如:employeeInfo 經(jīng)過(guò)格式化之后變?yōu)?employee_info * param nameJava對(duì)象名稱(chēng) */public static String wordFormat4DB(String name)Pattern p = Ppile(A-Z);Matcher m = p.matcher(name);StringBuffer sb = new StringBuffer();while(m.find()m.appendReplacement(sb, _+m.group();return m.appendTail(sb).toString().toLowerCase();(2) 添加測(cè)試代碼。import static org.junit.Assert.assertEquals;import org.junit.Test;public class TestWordDealUtil /測(cè)試wordFormat4DB正常運(yùn)行的情況Test public void wordFormat4DBNormal()String target = employeeInfo;String result = WordDealUtil.wordFormat4DB(target);assertEquals(employee_info, result);推薦每編寫(xiě)完一個(gè)測(cè)試方法,則執(zhí)行”run”,看測(cè)試結(jié)果,結(jié)果應(yīng)該是通過(guò)的。測(cè)試結(jié)果通過(guò):(3) 繼續(xù)添加測(cè)試代碼,并運(yùn)行看測(cè)試結(jié)果。public class TestWordDealUtil /測(cè)試 null 時(shí)的處理情況Test public void wordFormat4DBNull()String target = null;String result = WordDealUtil.wordFormat4DB(target);assertNull(result);/測(cè)試空字符串的處理情況Test public void wordFormat4DBEmpty()String target = ;String result = WordDealUtil.wordFormat4DB(target);assertEquals(, result);/測(cè)試當(dāng)首字母大寫(xiě)時(shí)的情況Test public void wordFormat4DBegin()String target = EmployeeInfo;String result = WordDealUtil.wordFormat4DB(target);assertEquals(employee_info, result);/測(cè)試當(dāng)尾字母為大寫(xiě)時(shí)的情況Test public void wordFormat4DBEnd()String target = employeeInfoA;String result = WordDealUtil.wordFormat4DB(target);assertEquals(employee_info_a, result);/測(cè)試多個(gè)相連字母大寫(xiě)時(shí)的情況Test public void wordFormat4DBTogether()String target = employeeAInfo;String result = WordDealUtil.wordFormat4DB(target); assertEquals(employee_a_info, result);再次運(yùn)行測(cè)試。很遺憾,JUnit 運(yùn)行界面提示我們有兩個(gè)測(cè)試情況未通過(guò)測(cè)試當(dāng)首字母大寫(xiě)時(shí)得到的處理結(jié)果與預(yù)期的有偏差,造成測(cè)試失?。╢ailure);而當(dāng)測(cè)試對(duì) null 的處理結(jié)果時(shí),則直接拋出了異常測(cè)試錯(cuò)誤
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省德州市名校2025屆初三9月月考英語(yǔ)試題含答案
- 21《我不能失信》課件【知識(shí)提要】三年級(jí)下冊(cè)語(yǔ)文統(tǒng)編版
- 江西應(yīng)用技術(shù)職業(yè)學(xué)院《現(xiàn)代汽車(chē)生產(chǎn)與管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川衛(wèi)生康復(fù)職業(yè)學(xué)院《衛(wèi)生毒理學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 天水師范學(xué)院《遺民文學(xué)研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東省慶云縣重點(diǎn)中學(xué)2024-2025學(xué)年初三新課程教學(xué)質(zhì)量監(jiān)測(cè)生物試題試卷含解析
- 江蘇揚(yáng)州市梅嶺中學(xué)2024-2025學(xué)年初三第一次質(zhì)量調(diào)研卷化學(xué)試題文試卷含解析
- 內(nèi)蒙古通遼市奈曼旗市級(jí)名校2025屆普通高中畢業(yè)班3月質(zhì)量檢查生物試題含解析
- 圖木舒克職業(yè)技術(shù)學(xué)院《發(fā)動(dòng)機(jī)原理與構(gòu)造》2023-2024學(xué)年第二學(xué)期期末試卷
- 吉林省蛟河高級(jí)中學(xué)2024-2025學(xué)年高三2月階段性測(cè)試物理試題含解析
- 提高臥床患者踝泵運(yùn)動(dòng)的執(zhí)行率品管圈匯報(bào)書(shū)模板課件
- 同理心的應(yīng)用教學(xué)教材課件
- DB4102-T 025-2021海綿城市建設(shè)施工與質(zhì)量驗(yàn)收規(guī)范-(高清現(xiàn)行)
- 城市軌道交通安全管理隱患清單
- 錫膏使用記錄表
- 兒童保健學(xué)課件:緒論
- 中小學(xué)校園安全穩(wěn)定工作崗位責(zé)任清單
- 校園安全存在問(wèn)題及對(duì)策
- NY∕T 309-1996 全國(guó)耕地類(lèi)型區(qū)、耕地地力等級(jí)劃分
- 團(tuán)代會(huì)PPT模板
- 地基基礎(chǔ)軟弱下臥層驗(yàn)算計(jì)算表格
評(píng)論
0/150
提交評(píng)論