Spring-Controller單元測試
一般測試驅動開發專案中,我們會在Maven中建立一個專案檔案和一個一一對應的測試專案檔案。每寫好一個模組,先對其進行單元測試,再整合到現有的系統中。
針對Controller、Service、Dao三層架構來說,我們最常對Service和Dao進行單元測試。然而Controller的測試,很多人還是啟動Tomcat,進行介面測試,這樣不緊需要等待很長的編譯部署時間而且無法逐個Controller功能進行單獨測試,因此特意總結Controller層的單元測試。
技術選型:SpringMVC框架 。SpringMVC已經繼承了單元測試的類
1.建立普通類檔案
2.引入Spring單元測試註釋
注意:@RunWith(SpringJUnit4ClassRunner.class) //此處呼叫Spring單元測試類 @WebAppConfiguration //呼叫javaWEB的元件,比如自動注入ServletContext Bean等等 @ContextConfiguration(locations = {"classpath:spring-context.xml","classpath:spring-mvc.xml"})//載入Spring配置檔案 public class HealthArticleControllerTest {...程式碼片段 }//測試程式碼類
@WebAppConfiguration如果不加的話,是沒法呼叫WEB的一些特性的。經常會被遺忘掉。。。
@ContextConfiguration中,需要把所有Spring的配置檔案全部載入進來,因為有的專案中Spring 的xml配置是分拆的。 此處的xml是放在resources的根目錄中。
3.引入spring註解後,Controller的單元測試需要模擬Server的執行,需要在class中進行WEB環境的初始化。
HealthArticleController是我需要測試的Controller@Autowired HealthArticleController healthArticleController; @Autowired ServletContext context; MockMvc mockMvc; @Before public void setup(){ mockMvc = MockMvcBuilders.standaloneSetup(healthArticleController).build(); }
MockMvc是SpringMVC提供的Controller測試類
每次進行單元測試時,都是預先執行@Before中的setup方法,初始化healthArticleController單元測試環境。
注意:一定要把待測試的Controller例項進行MockMvcBuilders.standaloneSetup(xxxxController).build(); 否則會丟擲無法找到@RequestMapping路徑的異常:No mapping found for HTTP request with URI [/cms/app/getArticleList] in DispatcherServlet
4.前期準備工作都做好了。可以編寫單元測試方法了。
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif;">@org.junit.Test
public void getArticleListTest(){
</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"> </span>String postJson = healthArticleController.findPage();</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"> </span>//傳送請求</span>
ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.post("/cms/app/getArticleList").accept(MediaType.APPLICATION_JSON).param("criJson",postJson));
MvcResult mvcResult = resultActions.andReturn();
String result = mvcResult.getResponse().getContentAsString();
System.out.println("=====客戶端獲得反饋資料:" + result);
}
ResultAction是用來模擬Browser傳送FORM表單請求的。post()是請求的地址,accept()請求的內容 param()請求的鍵值對,如果有多個引數可以後綴呼叫多個param()
MvcResult是獲得伺服器的Response內容。
5.到此,整個完整的Controller單元測試完成。貼上我完整的程式碼
package com.chinare.health.modules.cms;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import javax.servlet.ServletContext;
import java.util.Map;
/**
* author: Samuel
* Date:2015-07-04
*/
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {"classpath:spring-context.xml", "classpath:spring-context-jedis.xml", "classpath:spring-mvc.xml", "classpath:spring-context-shiro.xml", "classpath:spring-context-activiti.xml"})
public class HealthArticleControllerTest {
@Autowired
HealthArticleController healthArticleController;
@Autowired
ServletContext context;
MockMvc mockMvc;
@Before
public void setup(){
mockMvc = MockMvcBuilders.standaloneSetup(context).build();
}
@org.junit.Test
public void getArticleListTest() throws Exception{
//準備引數
String <span style="font-family: Arial, Helvetica, sans-serif;">postJson </span>= "{\"mac\":\"h\",\"dtClient\":\"2015-06-03 13:20:10\"}";
//傳送請求
ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.post("/cms/app/getArticleList")
.accept(MediaType.APPLICATION_JSON).param("criJson",postJson));
MvcResult mvcResult = resultActions.andReturn();
String result = mvcResult.getResponse().getContentAsString();
System.out.println("=====客戶端獲得反饋資料:" + result);
}
}
相關推薦
Spring-Controller單元測試
一般測試驅動開發專案中,我們會在Maven中建立一個專案檔案和一個一一對應的測試專案檔案。每寫好一個模組,先對其進行單元測試,再整合到現有的系統中。 針對Controller、Service、Dao三層架構來說,我們最常對Service和Dao進行單元測試。然而Contro
Spring Mvc controller單元測試
弄了一下午的controller測試類,(主要還是不理解)~~~~~ 現在把我測試通過的步驟儲存下來,為需要的人一份借鑑 SpringMVC controller測試較簡單,從功能角度劃分,可分為兩種。一種是呼叫請求路徑測試,另一種是直接呼叫Controller方法測試
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-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
Springboot---Controller單元測試
知識準備 1、註解含義 @RunWith(SpringRunner.class):表示使用Spring Test元件進行單元測試,其中SpringRunner繼承類SpringJUnit4ClassRunner。 @WebAppConfiguration:測試環境使用,
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>
spring boot 單元測試錯誤
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTes
Spring Boot 單元測試詳解+實戰教程
Spring Boot 的測試類庫 Spring Boot 提供了許多實用工具和註解來幫助測試應用程式,主要包括以下兩個模組。 spring-boot-test:支援測試的核心內容。 spring-boot-test-autoconfigure:支援測試的
Spring mvc單元測試
import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.spring
spring-test單元測試(二)-進行struts action的請求單元測試
單元測試雖不強求,但你一旦養成習慣,你會愛上它。另外我們保證程式碼質量的兩個很重要的手段,一個是頭(單元測試)一個是尾(codereview)。那麼我們最常用的單元測試就是通過junit來進行,spring-test框架很好的集成了junit來進行這項工作,比如測試dao,
spring mvc單元測試(帶請求引數)
package com.gpl.test; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springfr