SpringMVC框架整合Junit進行單元測試(案例詳解)_第1頁
SpringMVC框架整合Junit進行單元測試(案例詳解)_第2頁
SpringMVC框架整合Junit進行單元測試(案例詳解)_第3頁
SpringMVC框架整合Junit進行單元測試(案例詳解)_第4頁
SpringMVC框架整合Junit進行單元測試(案例詳解)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論