版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄目錄 1一、 環(huán)境準(zhǔ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項(xiàng)目管理 3三、 項(xiàng)目結(jié)構(gòu)搭建與測(cè)試代碼編寫 43.1建立項(xiàng)目目錄與文件結(jié)構(gòu) 43.2 測(cè)試代碼編寫 43.3引用測(cè)試斷言 53.4 常見測(cè)試功能說明 5四、 測(cè)試執(zhí)行與輸出 74.1在Eclipse中開發(fā)項(xiàng)目 74.2使用maven在Eclipse中構(gòu)建項(xiàng)目 9五、 測(cè)試實(shí)例演示 105.1基于Eclipse的測(cè)試實(shí)例演示 105.2基于Eclipse+maven的測(cè)試實(shí)例演示 14六、 單元測(cè)試問題與解決 186.1項(xiàng)目測(cè)試管理 186.2測(cè)試代碼編寫 20環(huán)境準(zhǔn)備針對(duì)我公司各事業(yè)部JAVA開發(fā)環(huán)境與項(xiàng)目管理工具使用的情況,采用以下兩種方式進(jìn)行單元測(cè)試開發(fā):TestNG+cobertura在Eclipse中的集成在壓縮包中提供開發(fā)所需開發(fā)包:壓縮包的readExcel.jar實(shí)現(xiàn)從excel中讀取簡(jiǎn)單類型測(cè)試用例的功能。Eclipse單獨(dú)開發(fā):工具在”java單元測(cè)試工具包--EcLipse單獨(dú)開發(fā)”文件夾下,包括:lib.rar與cobertura.rar。進(jìn)行測(cè)試時(shí)需將這兩個(gè)文件解壓到項(xiàng)目目錄下的testsrc目錄下。其中,lib.rar為jar包文件夾,包括與result_eclipse.jar。1、為TestNG斷言定制包,在的斷言類中加入map、collection數(shù)據(jù)類型的斷言,并改進(jìn)了原有對(duì)數(shù)組斷言的缺陷。2、result_eclipse.jar為Eclipse單獨(dú)開發(fā)項(xiàng)目情況下的報(bào)告集成工具.cobertura.rar為覆蓋度統(tǒng)計(jì)工具包。將TestNG-6.8.1jar測(cè)試開發(fā)包加載Eclipse環(huán)境中,并下載TestNG的Eclipse插件。解壓.rar到項(xiàng)目的根目錄下,下載cobertura在Eclipse中的插件eCobertura.將result_eclipse.jar放入項(xiàng)目的lib文件夾中,若項(xiàng)目中無lib文件夾,需創(chuàng)建lib文件夾。1.2TestNG+cobertura在Eclipse+maven中的集成在maven中集成了TestNG與cobertura的插件,僅需在pom.xml文件對(duì)實(shí)現(xiàn)對(duì)TestNG與cobertura進(jìn)行依賴,maven會(huì)在編譯過程中自行下載,pom.xml的具體見第五部分Eclipse+Maven的實(shí)例演示。將”java單元測(cè)試工具包--EcLipse+maven開發(fā)”文件夾下的lib.rar與bat文件復(fù)制到項(xiàng)目目錄下的src/test目錄下,并將lib.rar解壓到當(dāng)前目錄下,lib.rar為jar包文件夾,包括與result_maven.jar。1、為TestNG斷言定制包,在的斷言類中加入map、collection數(shù)據(jù)類型的斷言,并改進(jìn)了原有對(duì)數(shù)組斷言的缺陷。2、result_eclipse.jar為Eclipse單獨(dú)開發(fā)項(xiàng)目情況下的報(bào)告集成工具.開發(fā)工具環(huán)境集成2.1Eclipse開發(fā)環(huán)境加載TestNG框架包文件在對(duì)原有的開發(fā)包進(jìn)行改進(jìn)后定制了。將改jar包加載到開發(fā)環(huán)境中,具體步驟:在對(duì)應(yīng)的項(xiàng)目點(diǎn)擊右鍵,選擇屬性,彈出屬性設(shè)置對(duì)話框:TestNG與cobertura的Eclipse插件下載安裝在help->Eclipsemaketplace中進(jìn)行插件在線下載安裝,分別搜索TestNG與cobertura,進(jìn)行下載2.2Eclipse開發(fā)環(huán)境+maven項(xiàng)目管理Maven集成TestNG與cobertura工具使用maven對(duì)開發(fā)項(xiàng)目進(jìn)行構(gòu)建,在pom.xml文件中加入對(duì)testNG與cobertura<dependency>對(duì)Testng的依賴 <groupId>org.testng</對(duì)Testng的依賴 <artifactId>testng</artifactId> <version></version> <scope>test</scope> </dependency><plugin><groupId></groupId><artifactId>cobertura-maven-plugin</artifactId></plugin>//cobertura依賴項(xiàng)目結(jié)構(gòu)搭建與測(cè)試代碼編寫基于以上環(huán)境的集成與配置,已經(jīng)可以進(jìn)行對(duì)待測(cè)代碼進(jìn)行測(cè)試構(gòu)建與代碼編寫。3.1建立項(xiàng)目目錄與文件結(jié)構(gòu)為了實(shí)現(xiàn)測(cè)試代碼與被測(cè)代碼相隔離,為測(cè)試代碼單獨(dú)建立文件夾(用maven構(gòu)建自動(dòng)創(chuàng)建測(cè)試文件夾),在scr/test/java進(jìn)行測(cè)試代碼編寫,若沒有用maven構(gòu)建項(xiàng)目,需在項(xiàng)目中創(chuàng)建src與testsrc目錄分別存放待測(cè)程序與測(cè)試程序。在項(xiàng)目根目錄的testsrc(Eclipse單獨(dú)開發(fā))或src/test(Eclipse+maven構(gòu)建)目錄下創(chuàng)建Testng.xml文件在testng.xml文件對(duì)可以對(duì)測(cè)試屬性進(jìn)行配置,可以選擇需要測(cè)試包、類、方法等,也可進(jìn)行參數(shù)化測(cè)試。<?xmlversion="1.0"encoding="UTF-8"?><suitename="Suite1"verbose="1"> <testname="Regression1"> <packages>//加入需要執(zhí)行的測(cè)試包 <packagename="hyhTest"/> <packagename="otherTest"/> </packages> </test></suite>測(cè)試代碼編寫Eclipse+maven構(gòu)建:在src/test/java目錄下建立測(cè)試類包,注意用maven構(gòu)建項(xiàng)目時(shí),測(cè)試包名需要是*Test形式。Eclipse開發(fā):在testsrc目錄下建立測(cè)試類包,為了對(duì)測(cè)試管理方便,測(cè)試包名需要是*Test形式。用@Test標(biāo)注測(cè)試方法,可以根據(jù)需要加入相應(yīng)的測(cè)試屬性。如下@Test(groups={"param"},……,……)publicvoidtestCalculateAppriasal(){}還有以下幾種標(biāo)注形式:@DataProvider、@Parameters參數(shù)化測(cè)試@ExpectedExceptions進(jìn)行異常檢測(cè)@Factory
標(biāo)記工廠方法@Test常用屬性alwaysRun
標(biāo)志依賴測(cè)試失敗后,測(cè)試方法是否執(zhí)行dependsOnGroups
這個(gè)方法依賴的組列表dependsOnMethods
這個(gè)方法依賴的方法列表enabled
這個(gè)類的方法是否激活groups
這個(gè)類或方法所屬的分組列表3.3引用測(cè)試斷言AssertEquals(Object,Object,message)/AssertEquals(Object,Object)其中,Object可以為基礎(chǔ)數(shù)據(jù)類型:int,double,char等,也可為vector,list,map,set等復(fù)雜數(shù)據(jù)類型。Message為報(bào)告中打印的相關(guān)提示信息。AssertEquals(Object[],Object[],message)/AssertEquals(Object,Object)assertFalse(booleancondition,Stringmessage)/assertFalse(booleancondition)判斷狀態(tài)錯(cuò)誤AssertNotEquals(Object,Object,message)/AssertEquals(Object,Object)其中,Object可以為基礎(chǔ)數(shù)據(jù)類型:int,double,char等,也可為vector,list,map,set等復(fù)雜數(shù)據(jù)類型。Message為報(bào)告中打印的相關(guān)提示信息。assertNotNull(Object)判斷參數(shù)是否為NULLassertNotSame(Object,Object,String)/assertNotSame(Object,Object,String)若兩個(gè)Object相等,拋出異常。assertSame(Object,Object,String)/assertNotSame(Object,Object,String)若兩個(gè)Object不相等,拋出異常。assertTrue(Boolean)狀態(tài)為假時(shí),拋出異常。assertEqualsNoOrder((Object[],Object[])/assertEqualsNoOrder((Object[],Object[],message)若兩個(gè)數(shù)組中有元素不同,拋出異常。不用對(duì)應(yīng)元素進(jìn)行比較單元測(cè)試開發(fā)中對(duì)Collection、map等數(shù)據(jù)類型斷言進(jìn)行了擴(kuò)充與改進(jìn)。常見測(cè)試功能說明參數(shù)化測(cè)試:@DataProvider與@Parameters@Parameters結(jié)合TestNG.xml文件可對(duì)帶參數(shù)的測(cè)試方法進(jìn)行參數(shù)化測(cè)試,僅對(duì)參數(shù)為基本數(shù)據(jù)類型有效(如int,String等),具體編寫如下:TestNG.xml文件設(shè)置參數(shù):在需使用參數(shù)的測(cè)試方法前加入如下標(biāo)注:@Parameters({"data1","data2"})///有多少參數(shù)就要加入多少個(gè)參數(shù)名@DataProvider可進(jìn)行高級(jí)參數(shù)化測(cè)試,及對(duì)復(fù)雜數(shù)據(jù)類型進(jìn)行測(cè)試(如collection、map等類集或自定義類),具體實(shí)現(xiàn)舉例如下說明:@DataProvider標(biāo)注的參數(shù)提供方法返回的數(shù)據(jù)可以從Excel表格中讀取簡(jiǎn)單數(shù)據(jù)類型,這樣便于數(shù)據(jù)的管理。壓縮包的readExcel.jar可實(shí)現(xiàn)Excel數(shù)據(jù)的讀取(僅為簡(jiǎn)單的數(shù)據(jù)類型讀?。篿nt、String),具體實(shí)現(xiàn)如下從Excel中讀取簡(jiǎn)單數(shù)據(jù)類型的測(cè)試參數(shù) @DataProvider() publicstaticObject[][]employ()throwsIOException { Filefile=newFile("./testsrc/params_excel/11.xlsx"); int[][]arrayStr=ReadExcel.getRunDataInt(file); returnReadEToObject(arrayStr); }}異常檢測(cè)兩種編寫形式均可:方式一:@Test(expectedExceptions=)///完成異常處理測(cè)試方式二:@ExpectedExceptions(NumberFormatException.class)//在進(jìn)行異常測(cè)試方法前加入此標(biāo)注@Test工廠測(cè)試:@Factory動(dòng)態(tài)創(chuàng)建測(cè)試案例。被@Factory標(biāo)注的方法返回測(cè)試用例數(shù)組(Object[]),舉例如下public
class
WebTestFactory
{
@Factory//標(biāo)注方法為工廠測(cè)試
public
Object[]
createInstances()
{
Object[]
result
=
new
Object[10];
for
(int
i
=
0;
i
<
10;
i++)
{
result[i]
=
new
WebTest(i
*
10);
return
result;
}
}測(cè)試類如下public
class
WebTest
{
private
int
m_numberOfTimes;
public
WebTest(int
numberOfTimes)
{
m_numberOfTimes
=
numberOfTimes;
}注意:測(cè)試類不需要@Test標(biāo)注。測(cè)試執(zhí)行與輸出4.1在Eclipse中開發(fā)項(xiàng)目有兩種方式執(zhí)行測(cè)試程序:利用TestNG與cobertura的Eclipse中的插件進(jìn)行測(cè)試選擇待測(cè)試的項(xiàng)目,點(diǎn)擊紅框中按鈕生成測(cè)試報(bào)告與覆蓋度報(bào)告,可在Eclipse中方便查閱:測(cè)試報(bào)告覆蓋度報(bào)告在待測(cè)代碼中以不同顏色區(qū)分覆蓋到的行利用命令行執(zhí)行測(cè)試將提供壓縮包中”java單元測(cè)試工具包--EcLipse單獨(dú)開發(fā)”文件夾下cobertura.rar與lib.rar解壓到testsrc目錄下中,并編寫執(zhí)行命令run.bat:cd..mduninstrumented進(jìn)入項(xiàng)目根目錄,創(chuàng)建臨時(shí)文件夾mdinstrumentedjavac-cptestsrc\lib\testng-6.8.1.jar-duninstrumentedsrc\aaa\*.javajavac-cptestsrc;-duninstrumentedtestsrc\aaaTest\*.java編譯被測(cè)代碼與測(cè)試代碼,放于uninstrumented文件夾中calltestsrc\cobertura\cobertura-instrument.bat--destinationinstrumenteduninstrumented\aaa\*.class在被測(cè)代碼中加入字節(jié)碼,便于覆蓋度統(tǒng)計(jì)java-cptestsrc\lib\testng-6.8.1.jar;testsrc\cobertura\cobertura.jar;instrumented;uninstrumented;-=cobertura.sertestsrc/testng.xml根據(jù)testng.xml文件執(zhí)行測(cè)試程序,生成測(cè)試結(jié)果calltestsrc\cobertura\cobertura-report--formathtml--datafilecobertura.ser--destinationreportssrc生成覆蓋度統(tǒng)計(jì)報(bào)告delcobertura.serjava-jartestsrc\lib\result_eclipse.jarrd/s/quninstrumentedrd/s/qinstrumentedrd/s/qreportsrd/s/qtest-output.\testsrc\Result_Report\Test_Result.html報(bào)告集成,刪除臨時(shí)文件夾及文件其中result_maven.jar為編寫的測(cè)試報(bào)告與覆蓋度報(bào)告集成工具。集成測(cè)試報(bào)告輸出形式4.2使用maven在Eclipse中構(gòu)建項(xiàng)目有兩種方式執(zhí)行測(cè)試程序:利用maven的Eclipse中的插件進(jìn)行測(cè)試在項(xiàng)目目錄下,選擇runas->mavenbuild,彈出如下對(duì)話框,輸入cobertura:cobertura運(yùn)行后在相應(yīng)的文件夾中生成測(cè)試報(bào)告\target\site\cobertura包括覆蓋度分析報(bào)告target\surefire-reports測(cè)試代碼報(bào)告利用maven的命令行執(zhí)行測(cè)試注意:第一次執(zhí)行測(cè)試時(shí),需將工具包“java單元測(cè)試工具包--EcLipse+maven開發(fā)”文件夾下的”加載斷言庫(kù)—執(zhí)行一次即可.bat”復(fù)制到項(xiàng)目目錄下的scr/test目錄下,并執(zhí)行一次,完成自定制庫(kù)在maven中的安裝。進(jìn)行項(xiàng)目根目錄,刪除原有的測(cè)試結(jié)果在項(xiàng)目文件夾下的src\test文件夾下解壓與result_maven.jar)壓縮文件,執(zhí)行以下的run.bat文件:進(jìn)行項(xiàng)目根目錄,刪除原有的測(cè)試結(jié)果cd..cd..Maven編譯、執(zhí)行、生成報(bào)告命令,無需更改rd/s/q.\srcMaven編譯、執(zhí)行、生成報(bào)告命令,無需更改callmvncobertura:cleancallmvncobertura:cobertura執(zhí)行報(bào)告集成程序,將result.jar開發(fā)包放入lib文件夾下,無需更改java-jar.\src執(zhí)行報(bào)告集成程序,將result.jar開發(fā)包放入lib文件夾下,無需更改.\src\test\Result_Report\Test_Result.html運(yùn)行后在src\test\Result_Report文件夾下生產(chǎn)最終集成的測(cè)試報(bào)告Test_Result.html如下:測(cè)試實(shí)例演示通過兩個(gè)簡(jiǎn)單實(shí)例簡(jiǎn)單說明基于TestNG的java單元測(cè)試流程5.1基于Eclipse的測(cè)試實(shí)例演示在項(xiàng)目中創(chuàng)建于src并列的測(cè)試文件夾testsrc,然后根據(jù)需要?jiǎng)?chuàng)建測(cè)試包,根據(jù)被測(cè)代碼創(chuàng)建測(cè)試類項(xiàng)目的基本目錄如下:在項(xiàng)目中加入編寫測(cè)試代碼packageaaaTest;importaaa.Aaa;//被測(cè)類的聲明importstaticorg.testng.Assert.assertEquals;Testing包方法的聲明importTesting包方法的聲明import;import;import;import;publicclassAaaTest//測(cè)試類{ privatestaticAaacalculator1=newAaa();@Test//測(cè)試標(biāo)注,可帶屬性 publicvoidtestAdd()//測(cè)試方法{ calculator1.add(7);//被測(cè)方法調(diào)用 calculator1.add(8); assertEquals(14,calculator1.getReuslt());//斷言 System.out.println("通過測(cè)試");//相關(guān)信息打印 }@Test publicvoidtestSub(){ calculator1.substract(9); assertEquals(-9,calculator1.getReuslt()); }@Test(timeOut=2000L)//timeout是Test的屬性,完成限時(shí)測(cè)試 publicvoidtestSquare() { calculator1.square(6); assertEquals(36,calculator1.getReuslt()); } publicvoidPrintResult() { System.out.println("方法Square被忽略,不進(jìn)行測(cè)試"); }@Test(expectedExceptions=java.lang.ArithmeticException.class)///完成異常處理測(cè)試 publicvoidtestDivide() { calculator1.divide(0); } @Test(enable=“false”)//////配置Test屬性,不進(jìn)行測(cè)試 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///完成測(cè)試方法前置工作,在測(cè)試方法執(zhí)行前會(huì)完成前置工作 publicstaticvoidsetUp1()throwsException { calculator1.clear(); System.out.println("ThisisBeforeClass!!!"); } @AfterClass publicstaticvoidtearDown1()throwsException { System.out.println("ThisisAfterClass!!!"); }}其中被測(cè)代碼如下:packageaaa;publicclassAaa{ ///////////////成員函數(shù)/////////////// /*********************/ /********加法*********/ /*********************/ 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; } ////////////成員變量///////// /*********************/ /********結(jié)果*********/ /*********************/ privatestaticintresult;}在testsrc目錄下創(chuàng)建testing.xml:對(duì)測(cè)試進(jìn)行配置<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEsuiteSYSTEM"/testng-1.0.dtd"><suitename="Suite"parallel="none"><testname="Test"><classes>//需要執(zhí)行的測(cè)試類<classname="aaaTest.AaaTest"/></classes></test></suite>兩種方式運(yùn)行:第四部分已經(jīng)有過介紹,這里就不再累述。命令行生成的報(bào)告如下圖5.2基于Eclipse+maven的測(cè)試實(shí)例演示用maven進(jìn)行構(gòu)建項(xiàng)目構(gòu)建在使用Maven進(jìn)行構(gòu)建后自動(dòng)生成測(cè)試文件夾與被測(cè)程序文件夾,同樣的方法創(chuàng)建測(cè)試包與測(cè)試類在項(xiàng)目的src/test目錄下創(chuàng)建testng.xml文件對(duì)測(cè)試進(jìn)行配置<?xmlversion="1.0"encoding="UTF-8"?><suitename="Suite1"verbose="1"><testname="Regression1">//測(cè)試組<parametername="data1"value="7000"></parameter>///參數(shù)化測(cè)試<parametername="data2"value="500"></parameter><classes>//選擇需要執(zhí)行的測(cè)試類<classname="employTest.TestEmployeeDetails"><methods>//選擇需要測(cè)試的方法<includename="testCalculateAppriasal"/></methods></class></classes><packages>////這里可以對(duì)需要執(zhí)行的測(cè)試包進(jìn)行選擇<packagename="hyhTest"/><packagename="employTest"/><packagename="org.hyh.numberTest"/></packages><classes><classname=""/></classes></test></suite>在pom.xml中加入對(duì)TestNG與cobertura的依賴,并配置對(duì)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中加入對(duì)testng的依賴在pom.xml中加入對(duì)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>在項(xiàng)目src/test/lib文件夾中加入與result_maven.jar文件特別注意:在用命令行執(zhí)行測(cè)試時(shí),需要先將開發(fā)的加載到本地倉(cāng)庫(kù)中,并在pom.進(jìn)行如下配置<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),生成如下測(cè)試報(bào)告單元測(cè)試問題與解決6.1項(xiàng)目測(cè)試管理 為了使項(xiàng)目與測(cè)試的條理更加清晰,設(shè)計(jì)測(cè)試管理框圖如下: 6.1.1測(cè)試目錄的管理 為了實(shí)現(xiàn)對(duì)測(cè)試代碼與被測(cè)代碼相隔離,對(duì)測(cè)試代碼與被測(cè)代碼建立獨(dú)立目錄進(jìn)行管理。在項(xiàng)目根目錄下創(chuàng)建src/test目錄,該目錄下存放包括:測(cè)試源代碼、配置文件、需調(diào)用的庫(kù)文件、批處理命令。工程的物理邏輯如下圖:Test目錄下:6.1.2配置xml文件完成對(duì)測(cè)試的管理 在測(cè)試過程中對(duì)tesng.xml文件進(jìn)行配置即可實(shí)現(xiàn)對(duì)測(cè)試的管理,如制定需執(zhí)行的測(cè)試套件、測(cè)試包、測(cè)試類、測(cè)試方法等,也可實(shí)現(xiàn)參數(shù)化測(cè)試的配置。 具體配置示例見5.2中的介紹。6.1.3測(cè)試代碼注釋編寫 在測(cè)試代碼編寫的同時(shí)需要對(duì)測(cè)試功能進(jìn)行注釋,可以使測(cè)試代碼更加清晰。示例如下:/* *測(cè)試類: *測(cè)試方法:CalculateYearlySalary();*輸入?yún)?shù):="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測(cè)試代碼編寫6.2.1Private及protected成員函數(shù)測(cè)試方法 當(dāng)java的類有一個(gè)方法的訪問修飾符為Private或protected時(shí),我們?cè)趯憸y(cè)試類時(shí)需要將其私有方法抽出,讓其可以訪問,就可以按要求進(jìn)行測(cè)試了??梢允褂肕ethod這個(gè)類將我們要測(cè)試的方法賦給它,其中它有一個(gè)設(shè)置,可是方法變成可進(jìn)入,這樣就可達(dá)到可測(cè)試的目的。示例:packagecalculator;publicclassCalculator{ ///////////////成員函數(shù)/////////////// /*********************/ /********加法*********/ /*********************/ privatevoidadd(intn)//私有方法 { +=n; }………………//以下代碼省略………………測(cè)試代碼: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);//設(shè)置抽出方法可用calculatorObject=method.invoke(calculator1,newObject[]{3});calculatorObject=method.invoke(calculator1,newObject[]{12});/////模擬方法調(diào)用,Object[]{12}為傳入?yún)?shù) } catch(Exceptione) { } assertEquals(15,calculator1.getReuslt());}………………//////以下代碼省略注意:導(dǎo)入Method類的時(shí)候要為引用類。 6.2.2樁代碼編寫 由于單元測(cè)試是針對(duì)代碼開發(fā)過程中對(duì)方法或模塊進(jìn)行測(cè)試,但在測(cè)試中會(huì)遇到被測(cè)代碼中包含未完成或暫不可實(shí)現(xiàn)的函數(shù)及代碼塊??梢允褂谩皹丁贝a替代,從而可以針對(duì)被測(cè)函數(shù)的代碼邏輯進(jìn)行提前測(cè)試。何時(shí)需要編寫樁代碼從被處理數(shù)據(jù)來源看,如果某段未完成代碼(函數(shù))是從被測(cè)程序外部獲取數(shù)據(jù)時(shí),我們可以用樁代碼進(jìn)行代替。從復(fù)雜度方面看,如果某段代碼(函數(shù))在被測(cè)程序?qū)用鏋轫樞驁?zhí)行代碼時(shí),我們可以用樁代碼進(jìn)行代替。如果未完成代碼傳入數(shù)據(jù)為被測(cè)代碼中的局部變量或者被測(cè)代碼中頻繁操作的全局變量,并且
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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. 人人文庫(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年體育賽事贊助合同詳細(xì)條款與權(quán)益分配3篇
- 2025年度跨國(guó)公司美金貸款合同
- 二零二五年度水稻種植基地建設(shè)合同
- 2025版離婚協(xié)議書范本:房產(chǎn)買賣合同分割及處理細(xì)則4篇
- 2025年度脫硫石膏復(fù)合材料銷售協(xié)議3篇
- 2025年冰箱洗衣機(jī)節(jié)能補(bǔ)貼項(xiàng)目合作協(xié)議3篇
- 2025年度離婚協(xié)議書:陳飛與劉婷離婚財(cái)產(chǎn)分割及子女撫養(yǎng)費(fèi)協(xié)議4篇
- 二零二五年度老舊小區(qū)消防隱患排查與整改承包合同2篇
- 二零二四云存儲(chǔ)服務(wù)與云原生應(yīng)用部署合同3篇
- 貨物運(yùn)輸協(xié)議
- ICU常見藥物課件
- CNAS實(shí)驗(yàn)室評(píng)審不符合項(xiàng)整改報(bào)告
- 農(nóng)民工考勤表(模板)
- 承臺(tái)混凝土施工技術(shù)交底
- 臥床患者更換床單-軸線翻身
- 計(jì)量基礎(chǔ)知識(shí)培訓(xùn)教材201309
- 中考英語(yǔ) 短文填詞、選詞填空練習(xí)
- 一汽集團(tuán)及各合資公司組織架構(gòu)
- 阿特拉斯基本擰緊技術(shù)ppt課件
- 初一至初三數(shù)學(xué)全部知識(shí)點(diǎn)
- 新課程理念下的班主任工作藝術(shù)
評(píng)論
0/150
提交評(píng)論