1. 程式人生 > >Spring MVC 單元測試

Spring MVC 單元測試

常規的方法則是啟動WEB伺服器 測試 出錯 停掉WEB 改程式碼 重啟WEB 測試 

大量的時間都浪費在WEB伺服器的啟動上

今天給大家介紹一種不用啟動WEB 直接採用單元測試的方法來測試請求是否準確 

該方法基於SpringMVC 與 Spring Test 框架

  1. package com.spring;  
  2. import java.io.FileNotFoundException;  
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9. import org.json.JSONObject;  
  10. import org.springframework.beans.factory.annotation.Autowired;  
  11. import org.springframework.http.MediaType;  
  12. import org.springframework.stereotype.Controller;  
  13. import org.springframework.ui.Model;  
  14. import org.springframework.web.bind.annotation.PathVariable;  
  15. import org.springframework.web.bind.annotation.RequestMapping;  
  16. import org.springframework.web.bind.annotation.RequestMethod;  
  17. import org.springframework.web.bind.annotation.ResponseBody;  
  18. import
     org.springframework.web.context.ContextLoader;  
  19. import org.springframework.web.context.WebApplicationContext;  
  20. import org.springframework.web.context.support.WebApplicationContextUtils;  
  21. import org.springframework.web.servlet.ModelAndView;  
  22. @Controller
  23. @RequestMapping(value = "/spring")  
  24. publicclass Action {  
  25.     @Autowired
  26.     Teacher teacher;  
  27.     // spring 支援restful的格式
  28.     @ResponseBody
  29.     @RequestMapping(value = "/rest/{ownerId}.do", method = RequestMethod.GET)  
  30.     public String findOwner(@PathVariable String ownerId, Model model,  
  31.             HttpServletResponse rep) throws IOException {  
  32.         return ownerId;  
  33.     }  
  34.     @RequestMapping(value = "/test.do", method = RequestMethod.GET)  
  35.     public String testa(Model model, HttpServletResponse rep)  
  36.             throws IOException {  
  37.         model.addAttribute("abc""efd");  
  38.         model.addAttribute(teacher);  
  39.         return"a";  
  40.     }  
  41.     @ResponseBody
  42.     // 理論上可以@ResponseBody 支援直接返回teacher物件 但是3.2裡有問題 我們還是老實返回字串吧
  43.     @RequestMapping(value = "/testb.do", method = RequestMethod.GET)  
  44.     public String testb(Model model, HttpServletResponse rep,  
  45.             HttpServletRequest req, String ex) throws IOException {  
  46.         // WEB中獲得SPRING容器
  47.         WebApplicationContext wac = WebApplicationContextUtils  
  48.                 .getRequiredWebApplicationContext(req.getServletContext());  
  49.         returnnew JSONObject(wac.getBean(Teacher.class)).toString();  
  50.     }  
  51.     @ResponseBody
  52.     @RequestMapping(value = "/post.do", method = RequestMethod.POST)  
  53.     public String post(Model model, HttpServletResponse rep,  
  54.             HttpServletRequest req, String ex) throws IOException {  
  55.         returnnew JSONObject(req.getParameterMap()).toString();  
  56.     }  
  57. }  

再上單元測試程式碼

  1. import java.awt.print.Printable;  
  2. import java.io.IOException;  
  3. import javax.servlet.http.HttpServletResponse;  
  4. import org.junit.Before;  
  5. import org.junit.Test;  
  6. import org.junit.runner.RunWith;  
  7. import org.springframework.beans.factory.annotation.Autowired;  
  8. import org.springframework.http.MediaType;  
  9. import org.springframework.test.context.ContextConfiguration;  
  10. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
  11. import org.springframework.test.context.web.WebAppConfiguration;  
  12. import org.springframework.test.web.servlet.MockMvc;  
  13. import org.springframework.test.web.servlet.ResultHandler;  
  14. import org.springframework.test.web.servlet.ResultMatcher;  
  15. import org.springframework.ui.Model;  
  16. import org.springframework.test.context.transaction.TransactionConfiguration;  
  17. import org.springframework.transaction.annotation.Transactional;  
  18. importstatic org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;  
  19. importstatic org.springframework.test.web.servlet.setup.MockMvcBuilders.*;  
  20. importstatic org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;  
  21. importstatic org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;  
  22. import org.springframework.web.bind.annotation.RequestMapping;  
  23. import org.springframework.web.bind.annotation.RequestMethod;  
  24. import org.springframework.web.context.WebApplicationContext;  
  25. @RunWith(SpringJUnit4ClassRunner.class)  
  26. @WebAppConfiguration
  27. @ContextConfiguration(locations = { "classpath:applicationContext.xml" })  
  28. //當然 你可以宣告一個事務管理 每個單元測試都進行事務回滾 無論成功與否
  29. @TransactionConfiguration(defaultRollback = true)  
  30. //記得要在XML檔案中宣告事務哦~~~我是採用註解的方式
  31. @Transactional
  32. publicclass ExampleTests {  
  33.     @Autowired
  34.     private WebApplicationContext wac;  
  35.     private MockMvc mockMvc;  
  36.     @Before
  37.     publicvoid setup() {  
  38.         // webAppContextSetup 注意上面的static import
  39.         // webAppContextSetup 構造的WEB容器可以新增fileter 但是不能新增listenCLASS
  40.         // WebApplicationContext context =
  41.         // ContextLoader.getCurrentWebApplicationContext();
  42.         // 如果控制器包含如上方法 則會報空指標
  43.         this.mockMvc = webAppContextSetup(this.wac).build();  
  44.     }  
  45. 相關推薦

    Spring MVC 單元測試異常 Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file

    read cti exe document ive pri simple fff ces Sping 3.2.8.RELEASE + sping mvc + JDK 1.8運行異常。 java.lang.IllegalStateException: Failed to

    Spring mvc單元測試

    import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.spring

    spring mvc單元測試(帶請求引數)

    package com.gpl.test; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springfr

    Spring MVC 單元測試

    常規的方法則是啟動WEB伺服器 測試 出錯 停掉WEB 改程式碼 重啟WEB 測試  大量的時間都浪費在WEB伺服器的啟動上 今天給大家介紹一種不用啟動WEB 直接採用單元測試的方法來測試請求是否準確  該方法基於SpringMVC 與 Spring

    Spring mvc 單元測試Demo

        以前用struts框架的時候,給HTTP介面做測試,只能在瀏覽器上拼url和引數測,十分麻煩,而且不能自動化。但是用了Spring mvc之後,這種狀況改變了。spring-test模組對spring mvc的介面提供了良好的單元測試框架支援。有了這個框架,便可以對H

    Spring 4 MVC 單元測試例子

    首先,要有一個Spring MVC專案,不會的話,點這裡看教程。 加入 maven 依賴: <dependency> <groupId>junit</groupId> <a

    Spring-test單元測試

    xtend manage 單元 true nconf ret trace ace oca package com.OnlineRetailers.service.base; import org.junit.runner.RunWith; import org.spri

    spring boot 單元測試(附:單元測試斷言彙總)

    Spring boot 單元測試: 常用的程式測試方法有: 1、直接通過在瀏覽器輸入網址訪問; 2、通過postman工具來測試; 3、通過編寫python指令碼來進行測試; 但這樣經常會一測就要測一整塊,相對單元測試來說定位問題比較麻煩,單元測試能幫助我們拆分方法,單獨測試

    Spring Boot單元測試&網路請求

    實際開發中,Junit單元測試是必不可少的。在spring-boot 中可以通過測試模組(spring-boot-starter-test)快速使用單元測試功能。 開始 本示例在 spring boot 1.5.4 版本測試通過 1、pom.xml中新增配置spring-b

    spring boot單元測試之druid NullPointException

    最近在使用spring boot 對 Controller 進行單元測試時,發現 druid 竟然丟擲了空指標異常。原因是,使用了druid的監控,需要經過druid的 Filter 攔截器,但是spr

    利用MAVEN搭建最小依賴包的spring mvc工程測試

    用eclipse新建maven工程  2、可能需要調整jdk,根據不通的環境,做相應調整 。引入tomcat執行環境。 3、開啟專案工程目錄 開啟 pom.xml 檔案  修改pom.x

    Maven專案中引入spring-test單元測試 @RunWith與@ContextConfigration報錯

    場景 在SSM專案整合時引入spring-test單元測試時, @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:applicationContext.xml"}) 報錯

    spring boot 單元測試

    引入maven依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo

    spring Junit單元測試 bean 無法注入的問題

    本人菜鳥在學習ssh 過程 ,遇見問題 向各位大佬請教。進行單元測試 爆出下面提示: 貼出下面配置資訊: applicationContext.xml 實現service 介面類 實現dao介面類 單元測試 進過本菜鳥的各種錯嘗試,上面的配置檔案內容沒有錯誤,只是整合框架的過

    JUnit4結合spring單元測試

    做單元測試非常簡單,結合spring做單元測試也很簡單。 首先,導包 先看一下目錄結構: 下面是測試基類(): package pms_test; import org.junit.Test; import org.junit.runner.RunWith; im

    Spring Boot 單元測試,注入失敗,報空指標錯誤

    我們在使用專案的時候,常常需求去單元測試,去測試我們寫的介面是否可以正常執行.自己在練習Spring Boot 搭建 Redis的時候進行測試.下面是測試類./** * @author jins * @date on 2018/5/6. */ @RunWith(Spri

    Spring單元測試

       一、在已經通過逆向工程生成相應類、介面、mapper後,希望向類中注入屬性並新增自己的方法 (1)向類中注入屬性: private Department department;         向員工

    Spring教程第二篇:Spring-Test(單元測試)

    在Spring的框架下,做單元測試的兩種辦法: 一、使用spring中對Junit框架的整合功能 除了junit4和spring的jar包,還需要spring-test.jar。引入如下依賴: <dependency>

    spring3 mvc 單元測試

    /* * 檔名:TestMVC.java * 版權:Copyright 2012-2012 Li Huaxin Tech. Co. Ltd. All Rights Reserved. * 描述: TestMVC.java * 修改人:lihuaxin * 修改時

    Spring-Controller單元測試

    一般測試驅動開發專案中,我們會在Maven中建立一個專案檔案和一個一一對應的測試專案檔案。每寫好一個模組,先對其進行單元測試,再整合到現有的系統中。 針對Controller、Service、Dao三層架構來說,我們最常對Service和Dao進行單元測試。然而Contro