軟件測試實驗-JUnit單元測試.doc_第1頁
軟件測試實驗-JUnit單元測試.doc_第2頁
軟件測試實驗-JUnit單元測試.doc_第3頁
軟件測試實驗-JUnit單元測試.doc_第4頁
軟件測試實驗-JUnit單元測試.doc_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章 JUnit單元測試實驗1 開始使用JUnit【實驗?zāi)康摹?、 學(xué)習(xí)使用JUnit4.X進行單元測試; 2、 掌握JUnit4.X編寫測試代碼的方法;3、 應(yīng)用JUnit進行單元測試,掌握最佳實踐編寫測試代碼。【實驗環(huán)境】1、 Windows環(huán)境,MyEclipse或Eclipse,JUnit4.x。2、 每個學(xué)生操作1臺電腦。【實驗原理】JUnit是一個開源的Java編程語言的單元測試框架,最初由 Erich Gamma 和 Kent Beck 編寫。Junit測試是一種白盒測試工具。JUnit是一套框架,繼承TestCase類,就可以用Junit進行自動測試了。具有JUnit經(jīng)驗對于應(yīng)用“測試驅(qū)動開發(fā)(TDD)”的程序開發(fā)模型是非常重要的。JUnit本質(zhì)上是一套框架,即開發(fā)者制定了一套條條框框,遵循這此條條框框要求編寫測試代碼,如繼承某個類,實現(xiàn)某個接口,就可以用JUnit進行自動測試了。由于JUnit相對獨立于所編寫的代碼,可以測試代碼的編寫可以先于實現(xiàn)代碼的編寫,XP 中推崇的 test first design的實現(xiàn)有了現(xiàn)成的手段:用JUnit寫測試代碼,寫實現(xiàn)代碼,運行測試,測試失敗,修改實現(xiàn)代碼,再運行測試,直到測試成功。以后對代碼的修改和優(yōu)化,運行測試成功,則修改成功。Java 下的 team 開發(fā),采用 cvs(版本控制) + ant(項目管理) + JUnit (集成測試) 的模式時,通過對ant的配置,可以很簡單地實現(xiàn)測試自動化?!緦嶒瀮?nèi)容】根據(jù)下面的實驗步驟完成實驗。1、 JUnit包下載。 (1) 從下載Junit,打開該鏈接,會有一個下載鏈接,下載Junit4.X.zip,保存在用戶機的文件系統(tǒng)中。(2) 解包Junit-4.X,得到如圖3-1的解包文件。圖1 Junit解包文件表1 Junit文件說明文件/目錄描 述junit.jarJUnit框架結(jié)構(gòu)、擴展和測試運行器的二進制發(fā)布src.jarJUnit的源代碼,包括一個 Ant 的buildfile文件junit是個目錄,內(nèi)有JUnit自帶的用JUnit編寫的測試示例程序javadocJUnit完整的API文檔doc一些文檔和文章,包括“Test Infected: Programmers Love Writing Tests”和其它一些資料,可以幫助我們?nèi)腴T。(3) 配置(以JUnit4.8.2為例)。步驟如下: 右擊“我的電腦”-“屬性”-高級-環(huán)境變量; 在系統(tǒng)變量中選擇“CLASSPATH”(如果沒有則新建一個,變量名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加入到變量值即可,多個中間需用;隔開。圖2 Junit配置成功 (4) 檢驗:運行中輸入cmd輸入命令:java org.junit.runner.JUnitCore org.junit.tests.AllTests配置成功,如圖2所示。2、 編寫JUnit測試用例。使用JUnit 的最佳實踐:(1) 新建一個名為test的source folder,用于存放測試類源代碼;(2) 目標類與測試類應(yīng)該位于同一個包下面,這樣測試類中就不必導(dǎo)入源代碼所在的包,因為他們位于同一個包下面;(3) 測試類的命名規(guī)則:假如目標類是Calculator,那么測試類應(yīng)該命名為TestCalculator或者是CalculatorTest。下面將以一個具體的實例進行說明。(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) 建一個包com.test 并在此包下建一個除法類:Divide。圖8 類Divide Divide類的程序源代碼如下所示: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;代碼編寫完成后,進行調(diào)試編譯,確保沒有語法錯誤。 (5) 右鍵Divide類。圖9 新建JUnit Test Case(1)圖10 新建JUnit Test Case(2)圖11 新建JUnit Test Case(3)MyEclipse會自動為測試類取名:被測試類+Test,單擊Next就可以了。根據(jù)圖12選擇需要進行測試的方法。注意:測試類之所以使用“Test”開頭或“Test”結(jié)尾,是為了更好的區(qū)分測試類與被測試類。圖12 選擇需要測試的方法(6) 創(chuàng)建測試用例。首先創(chuàng)建一個默認的測試用例。圖13 產(chǎn)生默認的測試用例 (7) 執(zhí)行測試用例。如圖14所示。測試結(jié)果:紅色,測試失敗。圖14 運行測試用例圖15 測試結(jié)果 所有類測試結(jié)果(8) 修改測試用例:DivideTest.java。具體代碼如圖16所示。新測試用例運行后的測試結(jié)果如圖17所示。注意:測試方法必須使用注解 org.junit.Test 修飾。 測試方法必須使用 public void 修飾,而且不能帶有任何參數(shù)。測試方法在JUnit4.X中沒有要求,但是為了使得命名意義,一般推薦采用“test”+“被測試方法”的命名規(guī)則。assertEquals 是由 JUnit 提供的一系列判斷測試結(jié)果是否正確的靜態(tài)斷言方法(位于類 org.junit.Assert 中)之一,我們使用它將執(zhí)行結(jié)果 result 和預(yù)期值“result”進行比較,來判斷測試是否成功。圖16 修改后的測試用例圖17 修改后的測試用例的測試結(jié)果綠色的進度條提示我們,測試運行通過了。但現(xiàn)在就宣布代碼通過了單元測試還為時過早。記?。耗愕膯卧獪y試代碼不是用來證明你是對的,而是為了證明你沒有錯。因此單元測試的范圍要全面,比如對邊界值、正常值、錯誤值得測試;對代碼可能出現(xiàn)的問題要全面預(yù)測,而這也正是需求分析、詳細設(shè)計環(huán)節(jié)中要考慮的。3、 應(yīng)用JUnit對類WordDealUtil編寫測試代碼。(1) 被測試程序說明:對名稱、地址等字符串格式的內(nèi)容進行格式檢查。將Java對象名稱(每個單詞的頭字母大寫)按照數(shù)據(jù)庫命名的習(xí)慣進行格式化格式化后的數(shù)據(jù)為小寫字母,并且使用下劃線分割命名單詞。import java.util.regex.Matcher;import java.util.regex.Pattern;/* * 對名稱、地址等字符串格式的內(nèi)容進行格式檢查 * 或者格式化的工具類 */public class WordDealUtil /* * 將Java對象名稱(每個單詞的頭字母大寫)按照 * 數(shù)據(jù)庫命名的習(xí)慣進行格式化 * 格式化后的數(shù)據(jù)為小寫字母,并且使用下劃線分割命名單詞 * 例如:employeeInfo 經(jīng)過格式化之后變?yōu)?employee_info * param nameJava對象名稱 */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) 添加測試代碼。import static org.junit.Assert.assertEquals;import org.junit.Test;public class TestWordDealUtil /測試wordFormat4DB正常運行的情況Test public void wordFormat4DBNormal()String target = employeeInfo;String result = WordDealUtil.wordFormat4DB(target);assertEquals(employee_info, result);推薦每編寫完一個測試方法,則執(zhí)行”run”,看測試結(jié)果,結(jié)果應(yīng)該是通過的。測試結(jié)果通過:(3) 繼續(xù)添加測試代碼,并運行看測試結(jié)果。public class TestWordDealUtil /測試 null 時的處理情況Test public void wordFormat4DBNull()String target = null;String result = WordDealUtil.wordFormat4DB(target);assertNull(result);/測試空字符串的處理情況Test public void wordFormat4DBEmpty()String target = ;String result = WordDealUtil.wordFormat4DB(target);assertEquals(, result);/測試當(dāng)首字母大寫時的情況Test public void wordFormat4DBegin()String target = EmployeeInfo;String result = WordDealUtil.wordFormat4DB(target);assertEquals(employee_info, result);/測試當(dāng)尾字母為大寫時的情況Test public void wordFormat4DBEnd()String target = employeeInfoA;String result = WordDealUtil.wordFormat4DB(target);assertEquals(employee_info_a, result);/測試多個相連字母大寫時的情況Test public void wordFormat4DBTogether()String target = employeeAInfo;String result = WordDealUtil.wordFormat4DB(target); assertEquals(employee_a_info, result);再次運行測試。很遺憾,JUnit 運行界面提示我們有兩個測試情況未通過測試當(dāng)首字母大寫時得到的處理結(jié)果與預(yù)期的有偏差,造成測試失?。╢ailure);而當(dāng)測試對 null 的處理結(jié)果時,則直接拋出了異常測試錯誤

溫馨提示

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

評論

0/150

提交評論