版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
SpringMVC框架整合Junit進?單元測試(案例詳解)本?主要介紹在SpringMVC框架整合Junit框架進?單元測試。閑話少述,讓我們直?主題。系統(tǒng)環(huán)境軟件版本spring-webmvc4.3.6.RELEASEspring-test4.3.6.RELEASEjunit4.12引?依賴<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version><scope>test</scope></dependency>如上,引?了4個依賴,其中:1.junit是Junit單元測試的基礎(chǔ)依賴,它提供了@RunWith和@Test等單元測試必備的注解。<scope>test</scope>則指明了該依賴的作?范圍是test階段。2.spring-test依賴可以理解成是spring框架與junit框架的橋梁。提供了@WebAppConfiguration等注解。編寫單元測試基類@RunWith(SpringJUnit4ClassRunner.class)@WebAppConfiguration@ContextConfiguration("file:src/test/java/spring-config.xml")@ActiveProfiles("dev")@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true)publicabstractclassBaseControllerTest{protectedMockMvcmvc;@AutowiredprivateWebApplicationContextcontext;//獲取系統(tǒng)上下?protectedWebApplicationContextgetCtx(){returnthis.context;}//初始化?法@Beforepublicvoidsetup()throwsSQLException{this.mvc=MockMvcBuilders.webAppContextSetup(this.context).build();}//封裝返回結(jié)果protectedStringgetMockResultStr(MockHttpServletRequestBuilderrequestBuilder){try{MvcResultmvcResult=this.mockMvc.perform(requestBuilder).andExpect(status().isOk()).andDo(MockMvcResultHandlers.print()).andReturn();MockHttpServletResponseresponse=mvcResult.getResponse();response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);returnresponse.getContentAsString();}catch(Exceptione){e.printStackTrace();returnnull;}}}代碼說明1.@RunWith(SpringJUnit4ClassRunner.class)注解表明使?SpringJUnit4ClassRunner來運?測試?例。2.@WebAppConfiguration注解表明使?的ApplicationContext將是WebApplicationContext類型的;value屬性指定web應(yīng)?的根;同時,他必須與@ContextConfiguration?同使?。3.@ContextConfiguration注解的作?是導(dǎo)?我們需要的配置?件或者類,這?指定了SpringMVC的配置?件4.@ActiveProfiles注解是指定單元測試連接的環(huán)境。5.@TransactionConfiguration注解是?與管理spring事務(wù)的。6.MockHttpServletRequest類為了模擬HttpServletRequest對象,可以通過它來設(shè)置請求頭,這在需要鑒權(quán)的接?測試中?分實?。7.MockMvc實現(xiàn)了對Http請求的模擬,能夠直接使??絡(luò)的形式,轉(zhuǎn)換到Controller的調(diào)?,這樣可以使得測試速度快,不依賴?絡(luò)環(huán)境,?且提供了?套驗證的?具,這樣可以使得請求的驗證統(tǒng)??且很?便。getMockResultStr?法是封裝了公共的測試?法以及響應(yīng)參數(shù)。其中:MvcResultmvcResult=this.mockMvc.perform(requestBuilder).andExpect(status().isOk()).andDo(MockMvcResultHandlers.print()).andReturn();1.perform?法是執(zhí)??個RequestBuilder請求,調(diào)?Controller的業(yè)務(wù)處理邏輯。2.andExpect?法是添加執(zhí)?完成后的斷?,添加ResultMatcher驗證規(guī)則,驗證控制器執(zhí)?完成后結(jié)果是否正確,此處是驗證狀態(tài)是否是2003.andDo?法是添加?個結(jié)果處理器,?如再此處是andDo(MockMvcResultHandlers.print())輸出整個響應(yīng)結(jié)果信息,可以在調(diào)試的時候使?。4.andReturn:?法是執(zhí)?完成后返回相應(yīng)的結(jié)果。MockMvcRequestBuildersRequestBuilder是?來構(gòu)建請求的。其提供了?個?法buildRequest(ServletContextservletContext)?于構(gòu)建MockHttpServletRequest;其主要有兩個?類MockHttpServletRequestBuilder和MockMultipartHttpServletRequestBuilder(?件上傳時使?),即?來mock客戶端請求需要的所有數(shù)據(jù)。主要API有MockHttpServletRequestBuilder.get(StringurlTemplate,Object…urlVariables):根據(jù)uri模板和uri變量值得到?個GET請求?式的RequestBuilder,如果在controller的?法中method選擇的是RequestMethod.GET,那在controllerTest中對應(yīng)就要使?MockMvcRequestBuilders.get。MockHttpServletRequestBuilder.post(StringurlTemplate,Object…urlVariables):同get類似,但是是post?法,通過param?法來設(shè)置請求參數(shù)。返回結(jié)果的content-type是application/json的請求的單元測試get請求測試get請求的測試就是調(diào)?MockMvcRequestBuilders的get?法,在該?法中傳?接?地址。MockHttpServletRequestBuilderrequestBuilder=MockMvcRequestBuilders.get("/v1/works/lineup/set").param("id","123").param("first_flag",String.valueOf(true));Stringresult=getMockResultStr(requestBuilder);post請求測試post請求的測試就是調(diào)?MockMvcRequestBuilders的post?法,在該?法中傳?接?地址。MockHttpServletRequestBuilderrequestBuilder=MockMvcRequestBuilders.post("/v1/blockly/copy").param("id","1211");success(requestBuilder);?件上傳測試?件上傳的測試就是調(diào)?MockMvcRequestBuilders的multipart?法,在該?法中傳?接?地址。Filefile=newFile(RestArmWorksControllerTest.class.getClassLoader().getResource("20201102172053.png").toURI());MockMultipartFilemockMultipartFile=newMockMultipartFile("file","20201102172053.png","",newFileInputStream(file));MockMultipartHttpServletRequestBuilderservletRequestBuilder=MockMvcRequestBuilders.multipart("/creation/fileUpload.do").file(mockMultipartFile);Stringresult=getMockResultStr(servletRequestBuilder);發(fā)送?個json格式的數(shù)據(jù)到Controller層StringrequestJson=JSONObject.toJSONString(folderInfo);MockHttpServletRequestBuilderrequestBuilder=MockMvcRequestBuilders.post("http://v1/works/save").contentType(MediaType.APPLICATION_JSON).content(requestJson);返回結(jié)果是視圖請求的單元測試那么,問題來了,如果?個接?的返回結(jié)果是視圖,那么這個接?的單元測試該如何寫呢??如下?這個接?:@RequestMapping(value="/edit")publicStringedit(ModelMapmodel,HttpServletRequestrequest,HttpServletResponseresponse){LongscriptId=null;if(StringUtils.isNotBlank(request.getParameter("scriptId"))){scriptId=Long.parseLong(request.getParameter("scriptId"));}if(scriptId!=null){MallSuperscriptmallSuperscript=superScriptService.getScriptById(scriptId);model.addAttribute("superScript",mallSuperscript);}model.addAttribute("scriptTypeMap",ScriptType.toMap());("?標(biāo)編輯頁?返回成功");return"manage/superScript/edit";}這個接?返回的是?個視圖,就是名稱為edit.jsp頁?。它的測試?法可以像下?這樣寫。@TestpublicvoidtestEdit()throwsException{MvcResultmvcResult=mvc.perform(get("/manage/tab2/superScript/edit").sessionAttr("adminid","1111").sessionAttr("platformid",1001L).param("scriptId","1111")).andExpect(status().isOk()).andDo(print()).andReturn();assertEquals("manage/superScript/edit",mvcResult.getModelAndView().getViewName());}通過mvcResult.getModelAndView().getViewName()獲取視圖的名稱。直接測試?個service的?法上?的那些測試針對的都是Controller層的接?,那么如果要測試?個
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年石家莊市公安局關(guān)于公開招聘公安機關(guān)警務(wù)輔助人員的備考題庫及答案詳解一套
- 2025-2030中國菠蘿醛市場占有率調(diào)查及前景運行態(tài)勢展望研究報告
- 2026年鹽城市公安局亭湖分局招聘警務(wù)輔助人員備考題庫及答案詳解參考
- 2025至2030中國柔性顯示面板市場需求變化與供應(yīng)鏈優(yōu)化策略研究報告
- 2025-2030 中國鋁扣板行業(yè)發(fā)展現(xiàn)狀分析與競爭策略分析研究報告
- 2025-2030重慶市大武漢科技新城行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2026年永川法院公開招聘聘用制書記員備考題庫及1套參考答案詳解
- 臨澤縣2026年公開選聘社區(qū)工作者備考題庫及答案詳解1套
- 2025至2030中國衛(wèi)浴潔具市場高端化發(fā)展與競爭格局演變研究報告
- 2025-2030中國水晶山梨醇市場現(xiàn)狀動態(tài)發(fā)展分析研究研究報告
- 2024私人土地買賣協(xié)議書樣本
- 手術(shù)中輸血制度
- 北京市2024年第二次普通高中學(xué)業(yè)水平合格性考試語文試卷(含答案)
- 外研版小學(xué)英語(三起點)六年級上冊期末測試題及答案(共3套)
- ?;愤\輸安全培訓(xùn)-危險品運輸車輛的安全檢查與維護
- 浪漫主義與民族主義
- 浙江省城市軌道交通工程預(yù)算定額(2018版)
- 肝硬化腹水診療指南(2023版)解讀
- 貴州玄德生物科技股份有限公司年產(chǎn)5000噸生態(tài)特色食品(4500L超臨界CO2流體萃?。┚罴庸どa(chǎn)線建設(shè)項目環(huán)境影響報告
- 高二學(xué)業(yè)水平測試-地理復(fù)習(xí)提綱分解
- GB/T 36255-2018建筑施工機械與設(shè)備混凝土噴射機械術(shù)語和商業(yè)規(guī)格
評論
0/150
提交評論