controller 測試 不使用其他api接口測試工具
一般而言,我們寫好一個模塊后,會對其進行單元測試,再集成到現有的系統中。
但是呢~針對Controller、Service、Dao三層來說,我們最常的是對Service和Dao進行單元測試。然而Controller的測試,很多人還是啟動Tomcat,使用Postman進行api測試,這樣不僅需要等待很長的編譯部署時間,而且無法逐個Controller功能進行單獨測試,因此特意總結Controller層的單元測試。順便說下,Postman挺好用的,只是我們仍然需要啟動tomcat,有點浪費時間。
那么,我們需要有一種不需啟動tomcat就可以測試controller層的方法。
接下來我們細細講來。
controller所采用的是SpringMVC框架 。SpringMVC已經繼承了單元測試的類
步驟:
1.創建普通類文件
2.引入Spring單元測試注釋
@RunWith(SpringJUnit4ClassRunner.class) // 此處調用Spring單元測試類 @WebAppConfiguration // 調用javaWEB的組件,比如自動注入ServletContext Bean等等 @ContextConfiguration(locations = { "classpath:context.xml", "classpath:mvccontext.xml" }) // 加載Spring配置文件 public class TestPayTypeController { @Autowired PayTypeController payTypeController;//測試的controller類 @Autowired ServletContext context; MockMvc mockMvc; @Before public void setup() { mockMvc = MockMvcBuilders.standaloneSetup(payTypeController).build(); } }
注意:
@WebAppConfiguration如果不加的話,是沒法調用WEB的一些特性的。經常會被遺忘掉。。。
@ContextConfiguration中,需要把所有Spring的配置文件全部加載進來,因為有的項目中Spring 的xml配置是分拆的。 此處的xml是放在resources的根目錄中。
3.引入spring注解后,Controller的單元測試需要模擬Server的運行,需要在class中進行WEB環境的初始化。
MockMvc是SpringMVC提供的Controller測試類
每次進行單元測試時,都是預先執行@Before中的setup方法,初始化PayTypeController單元測試環境。
4.前期准備工作都做好了。可以編寫單元測試方法了。
先看get方法請求
ResultAction是用來模擬Browser發送FORM表單請求的。get()是請求的地址,accept()請求的內容 ;
@org.junit.Test // get請求 public void getListTest() throws Exception { // 發送請求 ResultActions resultActions = this.mockMvc .perform(MockMvcRequestBuilders.get("/paytype/list/all").accept(MediaType.APPLICATION_JSON)); MvcResult mvcResult = resultActions.andReturn(); String result = mvcResult.getResponse().getContentAsString(); System.out.println("客戶端獲的數據:" + result); }
在控制台打印如下,說明成功了!
接下來使用post 請求;
ResultAction是用來模擬Browser發送FORM表單請求的。post()是請求的地址,accept()請求的內容 param()請求的鍵值對,如果有多個參數可以后綴調用多個param();
MvcResult是獲得服務器的Response內容。
@org.junit.Test // post請求 public void addTest() throws Exception { // 發送請求 ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.post("/paytype/add") .accept(MediaType.APPLICATION_JSON).param("typename", "一年停").param("payfee","4444.0").param("payto", "post")); MvcResult mvcResult = resultActions.andReturn(); String result = mvcResult.getResponse().getContentAsString(); System.out.println("客戶端獲的數據:" + result); }
成功插入數據庫;
一般常用的就get,post請求;至此,我們不需啟動tomcat就能測試controller層的method。
附上controller類的method
@RequestMapping(value = "/add", method = RequestMethod.POST) public ResultMessage add(PayTypeModel ptm) throws Exception { ResultMessage result = new ResultMessage(); payTypeService.add(ptm); result.setResult("Y"); result.setMessage("增加繳費類型成功"); return result; } @RequestMapping(value="/get",method=RequestMethod.GET) public PayTypeModel get(@RequestParam int typeno) throws Exception { return payTypeService.get(typeno); }
如有錯誤,歡迎留言指正!