亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

詳解Spring MVC如何測試Controller(使用springmvc mock測試)

2024-07-13 10:15:39
字體:
來源:轉載
供稿:網友

在springmvc中一般的測試用例都是測試service層,今天我來演示下如何使用springmvc mock直接測試controller層代碼。

1.什么是mock測試?

mock測試就是在測試過程中,對于某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來創建以便測試的測試方法。

2.為什么要使用mock測試?

使用Mock O bject進行測試,主要是用來模擬那些在應用中不容易構造(如HttpServletRequest必須在Servlet容器中才能構造出來)或者比較復雜的對象(如JDBC中的ResultSet對象)從而使測試順利進行的工具。

3.常用注解

RunWith(SpringJUnit4ClassRunner.class): 表示使用Spring Test組件進行單元測試;

WebAppConfiguratio: 使用這個annotation會在跑單元測試的時候真實的啟一個web服務,然后開始調用Controller的Rest API,待單元測試跑完之后再將web服務停掉;

ContextConfiguration: 指定Bean的配置文件信息,可以有多種方式,這個例子使用的是文件路徑形式,如果有多個配置文件,可以將括號中的信息配置為一個字符串數組來表示;

4.安裝測試環境

spring mvc測試框架提供了兩種方式,獨立安裝和集成Web環境測試(此種方式并不會集成真正的web環境,而是通過相應的Mock API進行模擬測試,無須啟動服務器)。

 獨立安裝測試方式

MockMvcBuilders.standaloneSetup(Object... controllers):通過參數指定一組控制器,這樣就不需要從上下文獲取了;

主要是兩個步驟:

(1)首先自己創建相應的控制器,注入相應的依賴

(2)通過MockMvcBuilders.standaloneSetup模擬一個Mvc測試環境,通過build得到一個MockMvc

代碼如下:

package com.xfs.test;import org.junit.Assert;import org.junit.Before;import org.junit.Test;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.MvcResult;import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import org.springframework.test.web.servlet.result.MockMvcResultHandlers;import org.springframework.test.web.servlet.result.MockMvcResultMatchers;import org.springframework.test.web.servlet.setup.MockMvcBuilders;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.xfs.web.controller.APIController;/** * 獨立安裝測試方式 springmvc mock測試 * * @author admin * * 2017年11月23日 上午10:39:49 */public class TestApiOne {  private MockMvc mockMvc;  @Before  public void setUp() {    APIController apiController = new APIController();    mockMvc = MockMvcBuilders.standaloneSetup(apiController).build();  }  @Test  public void testGetSequence() {    try {      MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/api/getSequence"))                .andExpect(MockMvcResultMatchers.status().is(200))                .andDo(MockMvcResultHandlers.print())                .andReturn();      int status = mvcResult.getResponse().getStatus();      System.out.println("請求狀態碼:" + status);      String result = mvcResult.getResponse().getContentAsString();      System.out.println("接口返回結果:" + result);      JSONObject resultObj = JSON.parseObject(result);      // 判斷接口返回json中success字段是否為true      Assert.assertTrue(resultObj.getBooleanValue("success"));    } catch (Exception e) {      e.printStackTrace();    }  }} 

請求結果如下:

Spring,MVC測試Controller,springmvc,mock,測試

Spring,MVC測試Controller,springmvc,mock,測試

Spring,MVC測試Controller,springmvc,mock,測試

集成Web環境方式

MockMvcBuilders.webAppContextSetup(WebApplicationContext context):指定WebApplicationContext,將會從該上下文獲取相應的控制器并得到相應的MockMvc;

主要是三個步驟:

(1)@WebAppConfiguration:測試環境使用,用來表示測試環境使用的ApplicationContext將是WebApplicationContext類型的;value指定web應用的根

(2)通過@Autowired WebApplicationContext wac:注入web環境的ApplicationContext容器

(3)然后通過MockMvcBuilders.webAppContextSetup(wac).build()創建一個MockMvc進行測試

代碼如下:

package com.xfs.test;import org.junit.Assert;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.mock.web.MockHttpSession;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;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.request.MockMvcRequestBuilders;import org.springframework.test.web.servlet.result.MockMvcResultHandlers;import org.springframework.test.web.servlet.result.MockMvcResultMatchers;import org.springframework.test.web.servlet.setup.MockMvcBuilders;import org.springframework.web.context.WebApplicationContext;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;/** * 集成Web環境方式 springmvc mock測試 * * @author admin * * 2017年11月23日 上午11:12:43 */@RunWith(JUnit4ClassRunner.class)@WebAppConfiguration@ContextConfiguration(locations = { "classpath*:spring/*.xml" })public class TestApiTwo extends AbstractJUnit4SpringContextTests {  @Autowired  public WebApplicationContext wac;  public MockMvc mockMvc;  public MockHttpSession session;  @Before  public void before() throws Exception {    mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();  }  @Test  public void testGetSequence() {    try {      MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/api/getSequence"))                .andExpect(MockMvcResultMatchers.status().is(200))                .andDo(MockMvcResultHandlers.print())                .andReturn();      int status = mvcResult.getResponse().getStatus();      System.out.println("請求狀態碼:" + status);      String result = mvcResult.getResponse().getContentAsString();      System.out.println("接口返回結果:" + result);      JSONObject resultObj = JSON.parseObject(result);      // 判斷接口返回json中success字段是否為true      Assert.assertTrue(resultObj.getBooleanValue("success"));    } catch (Exception e) {      e.printStackTrace();    }  }}

運行結果和上面獨立測試時候一樣。

總結:

整個過程:

1、mockMvc.perform執行一個請求;

2、MockMvcRequestBuilders.get("/user/1")構造一個請求

3、ResultActions.andExpect添加執行完成后的斷言

4、ResultActions.andDo添加一個結果處理器,表示要對結果做點什么事情,比如此處使用MockMvcResultHandlers.print()輸出整個響應結果信息。

5、ResultActions.andReturn表示執行完成后返回相應的結果。

整個測試過程非常有規律:

1、準備測試環境

2、通過MockMvc執行請求

3、添加驗證斷言

4、添加結果處理器

5、得到MvcResult進行自定義斷言/進行下一步的異步請求

6、卸載測試環境

參考: spring-mvc-test-framework

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产91久久久久久久久| 久久久久久久久久av| 日韩欧美综合在线视频| 色综合久久88色综合天天看泰| 精品人伦一区二区三区蜜桃免费| 日韩亚洲欧美成人| 日本精品视频在线播放| 国产欧美精品一区二区| 精品久久久香蕉免费精品视频| 日韩成人在线视频| 国产一区二区三区精品久久久| 亚洲女人天堂av| 国产欧美日韩中文字幕| 亚洲va欧美va国产综合剧情| 欧美日韩免费网站| 日韩在线观看高清| 激情懂色av一区av二区av| 5566日本婷婷色中文字幕97| 国产一区二区香蕉| 亚洲精品久久久久久久久久久久| 欧美午夜www高清视频| 日韩精品中文字幕有码专区| 美日韩在线视频| 久久久久久国产精品久久| 国产一区二区丝袜| 成人精品视频99在线观看免费| 国产亚洲欧美日韩精品| 成人免费视频97| 日韩a**中文字幕| 亚洲春色另类小说| 国产精品男人爽免费视频1| 亚洲性xxxx| 夜夜嗨av一区二区三区四区| 欧美激情精品久久久久久久变态| 黑人巨大精品欧美一区免费视频| 欧美日韩美女在线观看| 日韩av片免费在线观看| 亚洲国产福利在线| 日韩欧美在线一区| 久久久久久尹人网香蕉| 色综合久久天天综线观看| 亚洲国产精品久久| 亚洲一二三在线| 欧美高清视频免费观看| 欧美大肥婆大肥bbbbb| 久久久www成人免费精品| 日本高清不卡在线| 亚洲一区二区三区xxx视频| 国产视频999| 欧美激情videoshd| 伊人久久大香线蕉av一区二区| 国产一区二区黑人欧美xxxx| 亚洲精品日韩在线| 欧美精品videosex牲欧美| 777国产偷窥盗摄精品视频| 久久电影一区二区| 高跟丝袜一区二区三区| 亚洲欧美资源在线| 日韩视频在线免费| 亚洲天堂av在线免费观看| 日韩国产高清污视频在线观看| 麻豆国产精品va在线观看不卡| 欧美激情精品久久久久久免费印度| 日韩av影片在线观看| 国产精品美女久久久免费| 最近2019中文字幕在线高清| 国模吧一区二区| 91av中文字幕| 久久青草福利网站| 91中文字幕在线观看| 久久乐国产精品| 久久国产精品影片| 欧美老女人性视频| 亚洲人精品午夜在线观看| 久久久久久久久爱| 在线日韩精品视频| 91高清视频免费观看| 欧洲成人免费aa| 不卡av电影在线观看| 日本韩国在线不卡| 国产精品永久免费观看| 国产精品入口尤物| 中文字幕亚洲第一| 国产免费久久av| 91免费国产视频| 日韩久久精品电影| 92版电视剧仙鹤神针在线观看| 欧美性感美女h网站在线观看免费| 亚洲毛片在线看| 国产91在线播放九色快色| 欧美视频在线免费看| 亚洲免费人成在线视频观看| 国产成人免费av电影| 亚洲国产精彩中文乱码av在线播放| 欧美激情国产高清| 日韩暖暖在线视频| 亚洲三级 欧美三级| 精品成人久久av| 日韩av理论片| 91精品国产99久久久久久| 亚洲精品wwww| 国产午夜精品免费一区二区三区| 亚洲jizzjizz日本少妇| 亚洲免费视频网站| 久久久国产成人精品| 2019av中文字幕| 亚洲缚视频在线观看| 中文字幕亚洲专区| 欧美日韩中国免费专区在线看| 精品久久久久久久久久久久| 视频在线观看一区二区| 欧美激情久久久| 精品视频在线导航| 欧美日韩人人澡狠狠躁视频| 欧美一级电影久久| 亚洲综合成人婷婷小说| 韩国精品美女www爽爽爽视频| 高清亚洲成在人网站天堂| 中文字幕日韩欧美在线视频| 自拍偷拍亚洲一区| 日韩av最新在线| 国产精品18久久久久久麻辣| 国语对白做受69| 在线看片第一页欧美| 久久久久久欧美| 精品av在线播放| 国产91色在线|| 欧美激情亚洲激情| 国产精品久久久久久久久久99| 欧美一区亚洲一区| 欧美午夜精品久久久久久久| 欧美精品在线视频观看| 亚洲欧美国产一区二区三区| 57pao国产成人免费| 日韩av在线免费播放| 久久综合国产精品台湾中文娱乐网| 亚洲国产精品久久久久秋霞不卡| 91精品久久久久久久久久久| 69久久夜色精品国产69乱青草| 久久人人爽人人爽人人片av高请| 久久精品视频在线| 欧美大全免费观看电视剧大泉洋| 揄拍成人国产精品视频| 亚洲黄页网在线观看| 欧美成人精品h版在线观看| 亚洲春色另类小说| 98视频在线噜噜噜国产| 亚洲三级av在线| 亚洲女人被黑人巨大进入| 日韩最新av在线| 日韩电影中文 亚洲精品乱码| 高清欧美一区二区三区| 国产区亚洲区欧美区| 在线成人免费网站| 国产香蕉一区二区三区在线视频| 日韩美女视频免费看| 日韩av在线网页| 97香蕉超级碰碰久久免费的优势| 最新国产成人av网站网址麻豆| 97视频在线观看免费高清完整版在线观看| 69av视频在线播放| 亚洲视频网站在线观看| 国产精品一区二区三区毛片淫片| 日韩av综合中文字幕|