版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
目錄目錄 1一、 環(huán)境準備 21.1 TestNG+cobertura在Eclipse中的集成 21.2TestNG+cobertura在Eclipse+maven中的集成 2二、 開發(fā)工具環(huán)境集成 22.1Eclipse開發(fā)環(huán)境 22.2Eclipse開發(fā)環(huán)境+maven項目管理 3三、 項目結構搭建與測試代碼編寫 43.1建立項目目錄與文件結構 43.2 測試代碼編寫 43.3引用測試斷言 53.4 常見測試功能說明 5四、 測試執(zhí)行與輸出 74.1在Eclipse中開發(fā)項目 74.2使用maven在Eclipse中構建項目 9五、 測試實例演示 105.1基于Eclipse的測試實例演示 105.2基于Eclipse+maven的測試實例演示 14六、 單元測試問題與解決 186.1項目測試管理 186.2測試代碼編寫 20環(huán)境準備針對我公司各事業(yè)部JAVA開發(fā)環(huán)境與項目管理工具使用的情況,采用以下兩種方式進行單元測試開發(fā):TestNG+cobertura在Eclipse中的集成在壓縮包中提供開發(fā)所需開發(fā)包:壓縮包的readExcel.jar實現從excel中讀取簡單類型測試用例的功能。Eclipse單獨開發(fā):工具在”java單元測試工具包--EcLipse單獨開發(fā)”文件夾下,包括:lib.rar與cobertura.rar。進行測試時需將這兩個文件解壓到項目目錄下的testsrc目錄下。其中,lib.rar為jar包文件夾,包括與result_eclipse.jar。1、為TestNG斷言定制包,在的斷言類中加入map、collection數據類型的斷言,并改進了原有對數組斷言的缺陷。2、result_eclipse.jar為Eclipse單獨開發(fā)項目情況下的報告集成工具.cobertura.rar為覆蓋度統計工具包。將TestNG-6.8.1jar測試開發(fā)包加載Eclipse環(huán)境中,并下載TestNG的Eclipse插件。解壓.rar到項目的根目錄下,下載cobertura在Eclipse中的插件eCobertura.將result_eclipse.jar放入項目的lib文件夾中,若項目中無lib文件夾,需創(chuàng)建lib文件夾。1.2TestNG+cobertura在Eclipse+maven中的集成在maven中集成了TestNG與cobertura的插件,僅需在pom.xml文件對實現對TestNG與cobertura進行依賴,maven會在編譯過程中自行下載,pom.xml的具體見第五部分Eclipse+Maven的實例演示。將”java單元測試工具包--EcLipse+maven開發(fā)”文件夾下的lib.rar與bat文件復制到項目目錄下的src/test目錄下,并將lib.rar解壓到當前目錄下,lib.rar為jar包文件夾,包括與result_maven.jar。1、為TestNG斷言定制包,在的斷言類中加入map、collection數據類型的斷言,并改進了原有對數組斷言的缺陷。2、result_eclipse.jar為Eclipse單獨開發(fā)項目情況下的報告集成工具.開發(fā)工具環(huán)境集成2.1Eclipse開發(fā)環(huán)境加載TestNG框架包文件在對原有的開發(fā)包進行改進后定制了。將改jar包加載到開發(fā)環(huán)境中,具體步驟:在對應的項目點擊右鍵,選擇屬性,彈出屬性設置對話框:TestNG與cobertura的Eclipse插件下載安裝在help->Eclipsemaketplace中進行插件在線下載安裝,分別搜索TestNG與cobertura,進行下載2.2Eclipse開發(fā)環(huán)境+maven項目管理Maven集成TestNG與cobertura工具使用maven對開發(fā)項目進行構建,在pom.xml文件中加入對testNG與cobertura<dependency>對Testng的依賴 <groupId>org.testng</對Testng的依賴 <artifactId>testng</artifactId> <version></version> <scope>test</scope> </dependency><plugin><groupId></groupId><artifactId>cobertura-maven-plugin</artifactId></plugin>//cobertura依賴項目結構搭建與測試代碼編寫基于以上環(huán)境的集成與配置,已經可以進行對待測代碼進行測試構建與代碼編寫。3.1建立項目目錄與文件結構為了實現測試代碼與被測代碼相隔離,為測試代碼單獨建立文件夾(用maven構建自動創(chuàng)建測試文件夾),在scr/test/java進行測試代碼編寫,若沒有用maven構建項目,需在項目中創(chuàng)建src與testsrc目錄分別存放待測程序與測試程序。在項目根目錄的testsrc(Eclipse單獨開發(fā))或src/test(Eclipse+maven構建)目錄下創(chuàng)建Testng.xml文件在testng.xml文件對可以對測試屬性進行配置,可以選擇需要測試包、類、方法等,也可進行參數化測試。<?xmlversion="1.0"encoding="UTF-8"?><suitename="Suite1"verbose="1"> <testname="Regression1"> <packages>//加入需要執(zhí)行的測試包 <packagename="hyhTest"/> <packagename="otherTest"/> </packages> </test></suite>測試代碼編寫Eclipse+maven構建:在src/test/java目錄下建立測試類包,注意用maven構建項目時,測試包名需要是*Test形式。Eclipse開發(fā):在testsrc目錄下建立測試類包,為了對測試管理方便,測試包名需要是*Test形式。用@Test標注測試方法,可以根據需要加入相應的測試屬性。如下@Test(groups={"param"},……,……)publicvoidtestCalculateAppriasal(){}還有以下幾種標注形式:@DataProvider、@Parameters參數化測試@ExpectedExceptions進行異常檢測@Factory
標記工廠方法@Test常用屬性alwaysRun
標志依賴測試失敗后,測試方法是否執(zhí)行dependsOnGroups
這個方法依賴的組列表dependsOnMethods
這個方法依賴的方法列表enabled
這個類的方法是否激活groups
這個類或方法所屬的分組列表3.3引用測試斷言AssertEquals(Object,Object,message)/AssertEquals(Object,Object)其中,Object可以為基礎數據類型:int,double,char等,也可為vector,list,map,set等復雜數據類型。Message為報告中打印的相關提示信息。AssertEquals(Object[],Object[],message)/AssertEquals(Object,Object)assertFalse(booleancondition,Stringmessage)/assertFalse(booleancondition)判斷狀態(tài)錯誤AssertNotEquals(Object,Object,message)/AssertEquals(Object,Object)其中,Object可以為基礎數據類型:int,double,char等,也可為vector,list,map,set等復雜數據類型。Message為報告中打印的相關提示信息。assertNotNull(Object)判斷參數是否為NULLassertNotSame(Object,Object,String)/assertNotSame(Object,Object,String)若兩個Object相等,拋出異常。assertSame(Object,Object,String)/assertNotSame(Object,Object,String)若兩個Object不相等,拋出異常。assertTrue(Boolean)狀態(tài)為假時,拋出異常。assertEqualsNoOrder((Object[],Object[])/assertEqualsNoOrder((Object[],Object[],message)若兩個數組中有元素不同,拋出異常。不用對應元素進行比較單元測試開發(fā)中對Collection、map等數據類型斷言進行了擴充與改進。常見測試功能說明參數化測試:@DataProvider與@Parameters@Parameters結合TestNG.xml文件可對帶參數的測試方法進行參數化測試,僅對參數為基本數據類型有效(如int,String等),具體編寫如下:TestNG.xml文件設置參數:在需使用參數的測試方法前加入如下標注:@Parameters({"data1","data2"})///有多少參數就要加入多少個參數名@DataProvider可進行高級參數化測試,及對復雜數據類型進行測試(如collection、map等類集或自定義類),具體實現舉例如下說明:@DataProvider標注的參數提供方法返回的數據可以從Excel表格中讀取簡單數據類型,這樣便于數據的管理。壓縮包的readExcel.jar可實現Excel數據的讀取(僅為簡單的數據類型讀?。篿nt、String),具體實現如下從Excel中讀取簡單數據類型的測試參數 @DataProvider() publicstaticObject[][]employ()throwsIOException { Filefile=newFile("./testsrc/params_excel/11.xlsx"); int[][]arrayStr=ReadExcel.getRunDataInt(file); returnReadEToObject(arrayStr); }}異常檢測兩種編寫形式均可:方式一:@Test(expectedExceptions=)///完成異常處理測試方式二:@ExpectedExceptions(NumberFormatException.class)//在進行異常測試方法前加入此標注@Test工廠測試:@Factory動態(tài)創(chuàng)建測試案例。被@Factory標注的方法返回測試用例數組(Object[]),舉例如下public
class
WebTestFactory
{
@Factory//標注方法為工廠測試
public
Object[]
createInstances()
{
Object[]
result
=
new
Object[10];
for
(int
i
=
0;
i
<
10;
i++)
{
result[i]
=
new
WebTest(i
*
10);
return
result;
}
}測試類如下public
class
WebTest
{
private
int
m_numberOfTimes;
public
WebTest(int
numberOfTimes)
{
m_numberOfTimes
=
numberOfTimes;
}注意:測試類不需要@Test標注。測試執(zhí)行與輸出4.1在Eclipse中開發(fā)項目有兩種方式執(zhí)行測試程序:利用TestNG與cobertura的Eclipse中的插件進行測試選擇待測試的項目,點擊紅框中按鈕生成測試報告與覆蓋度報告,可在Eclipse中方便查閱:測試報告覆蓋度報告在待測代碼中以不同顏色區(qū)分覆蓋到的行利用命令行執(zhí)行測試將提供壓縮包中”java單元測試工具包--EcLipse單獨開發(fā)”文件夾下cobertura.rar與lib.rar解壓到testsrc目錄下中,并編寫執(zhí)行命令run.bat:cd..mduninstrumented進入項目根目錄,創(chuàng)建臨時文件夾mdinstrumentedjavac-cptestsrc\lib\testng-6.8.1.jar-duninstrumentedsrc\aaa\*.javajavac-cptestsrc;-duninstrumentedtestsrc\aaaTest\*.java編譯被測代碼與測試代碼,放于uninstrumented文件夾中calltestsrc\cobertura\cobertura-instrument.bat--destinationinstrumenteduninstrumented\aaa\*.class在被測代碼中加入字節(jié)碼,便于覆蓋度統計java-cptestsrc\lib\testng-6.8.1.jar;testsrc\cobertura\cobertura.jar;instrumented;uninstrumented;-=cobertura.sertestsrc/testng.xml根據testng.xml文件執(zhí)行測試程序,生成測試結果calltestsrc\cobertura\cobertura-report--formathtml--datafilecobertura.ser--destinationreportssrc生成覆蓋度統計報告delcobertura.serjava-jartestsrc\lib\result_eclipse.jarrd/s/quninstrumentedrd/s/qinstrumentedrd/s/qreportsrd/s/qtest-output.\testsrc\Result_Report\Test_Result.html報告集成,刪除臨時文件夾及文件其中result_maven.jar為編寫的測試報告與覆蓋度報告集成工具。集成測試報告輸出形式4.2使用maven在Eclipse中構建項目有兩種方式執(zhí)行測試程序:利用maven的Eclipse中的插件進行測試在項目目錄下,選擇runas->mavenbuild,彈出如下對話框,輸入cobertura:cobertura運行后在相應的文件夾中生成測試報告\target\site\cobertura包括覆蓋度分析報告target\surefire-reports測試代碼報告利用maven的命令行執(zhí)行測試注意:第一次執(zhí)行測試時,需將工具包“java單元測試工具包--EcLipse+maven開發(fā)”文件夾下的”加載斷言庫—執(zhí)行一次即可.bat”復制到項目目錄下的scr/test目錄下,并執(zhí)行一次,完成自定制庫在maven中的安裝。進行項目根目錄,刪除原有的測試結果在項目文件夾下的src\test文件夾下解壓與result_maven.jar)壓縮文件,執(zhí)行以下的run.bat文件:進行項目根目錄,刪除原有的測試結果cd..cd..Maven編譯、執(zhí)行、生成報告命令,無需更改rd/s/q.\srcMaven編譯、執(zhí)行、生成報告命令,無需更改callmvncobertura:cleancallmvncobertura:cobertura執(zhí)行報告集成程序,將result.jar開發(fā)包放入lib文件夾下,無需更改java-jar.\src執(zhí)行報告集成程序,將result.jar開發(fā)包放入lib文件夾下,無需更改.\src\test\Result_Report\Test_Result.html運行后在src\test\Result_Report文件夾下生產最終集成的測試報告Test_Result.html如下:測試實例演示通過兩個簡單實例簡單說明基于TestNG的java單元測試流程5.1基于Eclipse的測試實例演示在項目中創(chuàng)建于src并列的測試文件夾testsrc,然后根據需要創(chuàng)建測試包,根據被測代碼創(chuàng)建測試類項目的基本目錄如下:在項目中加入編寫測試代碼packageaaaTest;importaaa.Aaa;//被測類的聲明importstaticorg.testng.Assert.assertEquals;Testing包方法的聲明importTesting包方法的聲明import;import;import;import;publicclassAaaTest//測試類{ privatestaticAaacalculator1=newAaa();@Test//測試標注,可帶屬性 publicvoidtestAdd()//測試方法{ calculator1.add(7);//被測方法調用 calculator1.add(8); assertEquals(14,calculator1.getReuslt());//斷言 System.out.println("通過測試");//相關信息打印 }@Test publicvoidtestSub(){ calculator1.substract(9); assertEquals(-9,calculator1.getReuslt()); }@Test(timeOut=2000L)//timeout是Test的屬性,完成限時測試 publicvoidtestSquare() { calculator1.square(6); assertEquals(36,calculator1.getReuslt()); } publicvoidPrintResult() { System.out.println("方法Square被忽略,不進行測試"); }@Test(expectedExceptions=java.lang.ArithmeticException.class)///完成異常處理測試 publicvoidtestDivide() { calculator1.divide(0); } @Test(enable=“false”)//////配置Test屬性,不進行測試 publicvoidtestmultiply() { calculator1.multiply(4); assertEquals(10,calculator1.getReuslt()); } @BeforeMethod publicvoidsetUp()throwsException { calculator1.clear(); System.out.println("ThisisBefore!!!"); } @AfterMethod publicvoidtearDown()throwsException { System.out.println("ThisisAfter!!!"); } @BeforeClass///完成測試方法前置工作,在測試方法執(zhí)行前會完成前置工作 publicstaticvoidsetUp1()throwsException { calculator1.clear(); System.out.println("ThisisBeforeClass!!!"); } @AfterClass publicstaticvoidtearDown1()throwsException { System.out.println("ThisisAfterClass!!!"); }}其中被測代碼如下:packageaaa;publicclassAaa{ ///////////////成員函數/////////////// /*********************/ /********加法*********/ /*********************/ publicvoidadd(intn){ result+=n; } /*********************/ /********減法*********/ /*********************/ publicvoidsubstract(intn){ result-=n; } /*********************/ /********乘法*********/ /*********************/ publicvoidmultiply(intn){ result*=n; } /*********************/ /********除法******/ /*********************/ publicvoiddivide(intn){ result/=n; } /*********************/ /********平方*********/ /*********************/ publicvoidsquare(intn){ result=n*n; } /*********************/ /********取值*********/ /*********************/ publicintgetReuslt(){ returnresult; } /*********************/ /********清值********/ /*********************/ publicvoidclear(){ result=0; } ////////////成員變量///////// /*********************/ /********結果*********/ /*********************/ privatestaticintresult;}在testsrc目錄下創(chuàng)建testing.xml:對測試進行配置<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEsuiteSYSTEM"/testng-1.0.dtd"><suitename="Suite"parallel="none"><testname="Test"><classes>//需要執(zhí)行的測試類<classname="aaaTest.AaaTest"/></classes></test></suite>兩種方式運行:第四部分已經有過介紹,這里就不再累述。命令行生成的報告如下圖5.2基于Eclipse+maven的測試實例演示用maven進行構建項目構建在使用Maven進行構建后自動生成測試文件夾與被測程序文件夾,同樣的方法創(chuàng)建測試包與測試類在項目的src/test目錄下創(chuàng)建testng.xml文件對測試進行配置<?xmlversion="1.0"encoding="UTF-8"?><suitename="Suite1"verbose="1"><testname="Regression1">//測試組<parametername="data1"value="7000"></parameter>///參數化測試<parametername="data2"value="500"></parameter><classes>//選擇需要執(zhí)行的測試類<classname="employTest.TestEmployeeDetails"><methods>//選擇需要測試的方法<includename="testCalculateAppriasal"/></methods></class></classes><packages>////這里可以對需要執(zhí)行的測試包進行選擇<packagename="hyhTest"/><packagename="employTest"/><packagename="org.hyh.numberTest"/></packages><classes><classname=""/></classes></test></suite>在pom.xml中加入對TestNG與cobertura的依賴,并配置對testng.xml的操作。<projectxmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0/xsd/maven-4.0.0.xsd"><modelVersion></modelVersion><groupId>hyh1</groupId><artifactId>hyh1</artifactId><version></version><packaging>jar</packaging><name>hyh1</name><url></url><properties><>UTF-8</></properties><dependencies>在pom.xml中加入對testng的依賴在pom.xml中加入對testng的依賴<groupId>org.testng1</groupId><artifactId>testng1</artifactId><version></version></dependency></dependencies><build>加載cobertura<plugins加載cobertura <plugin> <groupId></groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <useSystemClassLoader>true</useSystemClassLoader> <testFailureIgnore>true</testFailureIgnore>執(zhí)行TestNG.xml <parallel>false</執(zhí)行TestNG.xml <forkMode>once</forkMode> <suiteXmlFiles> <suiteXmlFile>testng.xml</suiteXmlFile><!--配置testng.xml文件中的信息-->> </suiteXmlFiles></configuration> </plugin></plugins></build></project>在項目src/test/lib文件夾中加入與result_maven.jar文件特別注意:在用命令行執(zhí)行測試時,需要先將開發(fā)的加載到本地倉庫中,并在pom.進行如下配置<dependency><groupId>org.testng1</groupId><artifactId>testng1</artifactId><version></version></dependency>執(zhí)行如下命令行:(僅需執(zhí)行一次即可)callmvninstall:install-file-DgroupId=org.testng1-DartifactId=testng1-Dversion=6.8.1-Dpackaging=jar-Dfile執(zhí)行src/test目錄下的run.bat(命令行的編寫格式見4.2),生成如下測試報告單元測試問題與解決6.1項目測試管理 為了使項目與測試的條理更加清晰,設計測試管理框圖如下: 6.1.1測試目錄的管理 為了實現對測試代碼與被測代碼相隔離,對測試代碼與被測代碼建立獨立目錄進行管理。在項目根目錄下創(chuàng)建src/test目錄,該目錄下存放包括:測試源代碼、配置文件、需調用的庫文件、批處理命令。工程的物理邏輯如下圖:Test目錄下:6.1.2配置xml文件完成對測試的管理 在測試過程中對tesng.xml文件進行配置即可實現對測試的管理,如制定需執(zhí)行的測試套件、測試包、測試類、測試方法等,也可實現參數化測試的配置。 具體配置示例見5.2中的介紹。6.1.3測試代碼注釋編寫 在測試代碼編寫的同時需要對測試功能進行注釋,可以使測試代碼更加清晰。示例如下:/* *測試類: *測試方法:CalculateYearlySalary();*輸入參數:="Rajeev",employee.MonthlySalary=8000,employee.age=25; *期望值:500 */ @Test publicvoidtestCalculateYearlySalary(){ employee.setName("Rajeev"); employee.setAge(25); employee.setMonthlySalary(8000); doublesalary=empBusinessLogic .calculateYearlySalary(employee); Assert.assertEquals(salary,500); }6.2測試代碼編寫6.2.1Private及protected成員函數測試方法 當java的類有一個方法的訪問修飾符為Private或protected時,我們在寫測試類時需要將其私有方法抽出,讓其可以訪問,就可以按要求進行測試了。可以使用Method這個類將我們要測試的方法賦給它,其中它有一個設置,可是方法變成可進入,這樣就可達到可測試的目的。示例:packagecalculator;publicclassCalculator{ ///////////////成員函數/////////////// /*********************/ /********加法*********/ /*********************/ privatevoidadd(intn)//私有方法 { +=n; }………………//以下代碼省略………………測試代碼:packagecalculatorTest;importstaticorg.testng.Assert.assertEquals;import;import;import;import;import;importorg.testng.annotations.ExpectedExceptions;import;importcalculator.Calculator;publicclassCalculatorTest{ privatestaticCalculatorcalculator1=newCalculator();@TestpublicvoidtestAdd(){ ObjectcalculatorObject=null; try {Methodmethod=calculator1.getClass().getDeclaredMethod("add",newClass[]{int.class}); method.setAccessible(true);//設置抽出方法可用calculatorObject=method.invoke(calculator1,newObject[]{3});calculatorObject=method.invoke(calculator1,newObject[]{12});/////模擬方法調用,Object[]{12}為傳入參數 } catch(Exceptione) { } assertEquals(15,calculator1.getReuslt());}………………//////以下代碼省略注意:導入Method類的時候要為引用類。 6.2.2樁代碼編寫 由于單元測試是針對代碼開發(fā)過程中對方法或模塊進行測試,但在測試中會遇到被測代碼中包含未完成或暫不可實現的函數及代碼塊??梢允褂谩皹丁贝a替代,從而可以針對被測函數的代碼邏輯進行提前測試。何時需要編寫樁代碼從被處理數據來源看,如果某段未完成代碼(函數)是從被測程序外部獲取數據時,我們可以用樁代碼進行代替。從復雜度方面看,如果某段代碼(函數)在被測程序層面為順序執(zhí)行代碼時,我們可以用樁代碼進行代替。如果未完成代碼傳入數據為被測代碼中的局部變量或者被測代碼中頻繁操作的全局變量,并且
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年年托育項目建議書
- 2025年新浪微博生態(tài)合作協議書
- 遼寧省2025秋九年級英語全冊Unit8ItmustbelongtoCarla課時4SectionB(1a-1d)課件新版人教新目標版
- 2025年谷物加工品質測試儀合作協議書
- 2025年城市文化展示系統項目合作計劃書
- 2025年體育專用地坪漆項目合作計劃書
- 小兒手術期間的生命體征監(jiān)測
- 改善排便體驗的建議
- 循證護理在手術護理中的角色
- 腦血栓患者家庭護理技巧
- 瀝青混凝土心墻碾壓石渣壩施工方案
- 裝載機鏟斗的設計
- 中國民俗文化概說(山東聯盟)智慧樹知到答案2024年青島理工大學
- 基礎有機化學實驗智慧樹知到期末考試答案章節(jié)答案2024年浙江大學
- 2024年北京市人力資源市場薪酬狀況白皮書
- 數字孿生智慧水利整體規(guī)劃建設方案
- 業(yè)委會換屆問卷調查表
- 慕課《如何寫好科研論文》期末考試答案
- 國開作業(yè)《建筑測量》學習過程(含課程實驗)表現-參考(含答案)33
- 幼兒園中班安全教育《這些東西能吃嗎》
- 電力線路維護檢修規(guī)程
評論
0/150
提交評論