最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC Mock測(cè)試實(shí)現(xiàn)原理及實(shí)現(xiàn)過(guò)程詳解

 更新時(shí)間:2020年10月09日 10:41:43   作者:陳彥斌  
這篇文章主要介紹了SpringMVC Mock測(cè)試實(shí)現(xiàn)原理及實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

什么是mock測(cè)試?

  在測(cè)試過(guò)程中,對(duì)于某些不容易構(gòu)成或者不容易獲取的對(duì)象,用一個(gè)虛擬的對(duì)象來(lái)創(chuàng)建以便測(cè)試的測(cè)試方法,就是Mock測(cè)試。

  Servlet、Request、Response等Servlet API相關(guān)對(duì)象本來(lái)就是由Servlet容器(Tomcat)創(chuàng)建的。

  這個(gè)虛擬的對(duì)象就是Mock對(duì)象。

  Mock對(duì)象是真實(shí)對(duì)象在調(diào)試期間的代替品。

為什么使用Mock測(cè)試?

  • 避免開(kāi)發(fā)模塊之間的耦合
  • 輕量、簡(jiǎn)單、靈活

MockMVC介紹

MockMvcBuilder

  他是用來(lái)構(gòu)造MockMVC的構(gòu)造器

  主要有兩個(gè)實(shí)現(xiàn):StandaloneMockMvcBuilder和DefaultMockMvcBuilder,分別對(duì)應(yīng)之前的兩種測(cè)試方式。

  我們直接使用靜態(tài)工廠MockMvcBuilders創(chuàng)建即可。

MockMvcBuilders

  負(fù)責(zé)創(chuàng)建MockMvcBuilder對(duì)象

  有兩種創(chuàng)建方式

    1、standaloneSetup(Object... controllers)

    2、webAppContextSetup(WebApplicationContext wac):指定WebApplicationContext,將會(huì)從該上下文獲取相應(yīng)的控制器并得到相應(yīng)的MockMvc

MockMvc

  對(duì)于服務(wù)器端的Spring MVC測(cè)試支持主入口點(diǎn)。

  通過(guò)MockMvcBuilder構(gòu)造

  MockMvcBuilder由MockMvcBuilders的靜態(tài)方法去構(gòu)造。

  核心方法:perform(RequestBuilder requestBuilder)---->執(zhí)行一個(gè)RequestBuilder請(qǐng)求,會(huì)自動(dòng)執(zhí)行SpringMvc的流程并映射到相應(yīng)的控制器執(zhí)行處理,該方法的返回值是一個(gè)ResultActions;

ResultActions

andExpect

  添加ResultMatcher驗(yàn)證規(guī)則,驗(yàn)證控制器執(zhí)行完成后結(jié)果是否正確。

andDo

  添加ResultHandler結(jié)果處理器,比如調(diào)試時(shí)打印結(jié)果到控制臺(tái);

andReturn

  最后返回相應(yīng)的MvcResult;然后進(jìn)行自定義驗(yàn)證/進(jìn)行下一步的異步處理。

MockMvcRequestBuilders

  • 用來(lái)構(gòu)造請(qǐng)求
  • 主要由兩個(gè)子類MockHttpServletRequestBuilder和MockMultipartHttpServletRequestBuilder(如文件上傳),即用來(lái)Mock客戶端請(qǐng)求需要的所有數(shù)據(jù)。

MockMvcResultMatchers

  • 用來(lái)匹配執(zhí)行完請(qǐng)求后的結(jié)果驗(yàn)證
  • 如果匹配失敗將拋出相應(yīng)的異常
  • 包含了很多驗(yàn)證API方法

MockMvcResultHandlers

  • 結(jié)果處理器,表示要對(duì)結(jié)果做點(diǎn)什么事情
  • 比如此處使用MockMvcResultHandlers.print()輸出整個(gè)相應(yīng)結(jié)果信息。

MvcResult

  單元測(cè)試執(zhí)行結(jié)果,可以針對(duì)執(zhí)行結(jié)果進(jìn)行自定義驗(yàn)證邏輯。

MocMvc的使用

添加依賴

    <!-- spring 單元測(cè)試組件包 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.0.7.RELEASE</version>
    </dependency>
 
    <!-- 單元測(cè)試Junit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>

測(cè)試類

TestMockMVC.java

package com.cyb.ssm.controller.test;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
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.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

//@WebAppConfiguration:可以在單元測(cè)試的時(shí)候,不用啟動(dòng)Servlet容器,就可以獲取一個(gè)Web應(yīng)用上下文
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/*.xml")
@WebAppConfiguration
public class TestMockMVC {
  @Autowired
  private WebApplicationContext wac;
  private MockMvc mockMvc;

  @Before
  public void Setup() {
    // 初始化一個(gè)MockMVC對(duì)象的方式有兩種:?jiǎn)为?dú)設(shè)置、web應(yīng)用上下文設(shè)置
    // 建議使用web應(yīng)用上下文設(shè)置
    mockMvc = new MockMvcBuilders().webAppContextSetup(wac).build();
  }

  @Test
  public void test() throws Exception {
    // 通過(guò)perform去執(zhí)行一個(gè)Http請(qǐng)求
    // andExpect:通過(guò)該方法,判斷請(qǐng)求執(zhí)行是否成功
    // andDo:對(duì)請(qǐng)求之后的結(jié)果,進(jìn)行輸出
    MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/item/showEdit").param("id", "1"))
        .andExpect(MockMvcResultMatchers.view().name("item/item-edit"))
        .andExpect(MockMvcResultMatchers.status().isOk())
        .andDo(MockMvcResultHandlers.print())
        .andReturn();
    System.out.println("===============");
    System.out.println(result.getHandler());
  }
}

運(yùn)行結(jié)果如下

JRE Oracle Corporation/13.0.1 is not supported, advanced source lookup disabled.
12月 12, 2019 4:48:43 下午 org.springframework.test.context.support.AbstractTestContextBootstrapper getDefaultTestExecutionListenerClassNames
信息: Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
12月 12, 2019 4:48:43 下午 org.springframework.test.context.support.AbstractTestContextBootstrapper getTestExecutionListeners
信息: Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@4470f8a6, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7c83dc97, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@7748410a, org.springframework.test.context.support.DirtiesContextTestExecutionListener@740773a3, org.springframework.test.context.transaction.TransactionalTestExecutionListener@37f1104d, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@55740540]
12月 12, 2019 4:48:43 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from file [D:\JAVA\eclipse_setup\ssm-project\target\classes\spring\applicationContext-dao.xml]
12月 12, 2019 4:48:43 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from file [D:\JAVA\eclipse_setup\ssm-project\target\classes\spring\applicationContext-service.xml]
12月 12, 2019 4:48:43 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from file [D:\JAVA\eclipse_setup\ssm-project\target\classes\spring\applicationContext-tx.xml]
12月 12, 2019 4:48:43 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from file [D:\JAVA\eclipse_setup\ssm-project\target\classes\spring\springmvc.xml]
12月 12, 2019 4:48:43 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.web.context.support.GenericWebApplicationContext@50ad3bc1: startup date [Thu Dec 12 16:48:43 CST 2019]; root of context hierarchy
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/item/updateItem],produces=[application/json;charset=utf8]}" onto public com.cyb.ssm.po.Item com.cyb.ssm.controller.ItemController.updateItem(java.lang.Integer,java.lang.String,java.lang.Float,com.cyb.ssm.po.Item,org.springframework.web.multipart.MultipartFile) throws java.lang.Exception
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/item/testRedirect],produces=[application/json;charset=utf8]}" onto public java.lang.String com.cyb.ssm.controller.ItemController.testRedirect(javax.servlet.http.HttpServletRequest)
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/item/testForward],produces=[application/json;charset=utf8]}" onto public java.lang.String com.cyb.ssm.controller.ItemController.testForward(javax.servlet.http.HttpServletRequest)
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/item/findItem],produces=[application/json;charset=utf8]}" onto public java.lang.String com.cyb.ssm.controller.ItemController.findItem(java.lang.Integer)
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/item/queryItem],produces=[application/json;charset=utf8]}" onto public org.springframework.web.servlet.ModelAndView com.cyb.ssm.controller.ItemController.queryItem() throws com.cyb.ssm.exception.CustomException
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/item/queryItem2],produces=[application/json;charset=utf8]}" onto public com.cyb.ssm.po.Item com.cyb.ssm.controller.ItemController.queryItem2(com.cyb.ssm.po.ItemQueryVO)
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/item/deleteItem],produces=[application/json;charset=utf8]}" onto public void com.cyb.ssm.controller.ItemController.deleteItem(java.lang.String[])
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/item/saveItem],produces=[application/json;charset=utf8]}" onto public java.util.Date com.cyb.ssm.controller.ItemController.saveItem(java.util.Date)
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/item/showEdit],produces=[application/json;charset=utf8]}" onto public org.springframework.web.servlet.ModelAndView com.cyb.ssm.controller.ItemController.showEdit(java.lang.Integer)
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/item/batchUpdateItem],produces=[application/json;charset=utf8]}" onto public java.util.List<com.cyb.ssm.po.Item> com.cyb.ssm.controller.ItemController.batchUpdateItem(com.cyb.ssm.po.ItemQueryVO)
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry register
信息: Mapped "{[/queryItemByIdWithRest]}" onto public com.cyb.ssm.po.Item com.cyb.ssm.controller.RestItemController.queryItemById()
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter initControllerAdviceCache
信息: Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@50ad3bc1: startup date [Thu Dec 12 16:48:43 CST 2019]; root of context hierarchy
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter initControllerAdviceCache
信息: Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@50ad3bc1: startup date [Thu Dec 12 16:48:43 CST 2019]; root of context hierarchy
12月 12, 2019 4:48:44 下午 org.springframework.mock.web.MockServletContext log
信息: Initializing Spring FrameworkServlet ''
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.FrameworkServlet initServletBean
信息: FrameworkServlet '': initialization started
12月 12, 2019 4:48:44 下午 org.springframework.web.servlet.FrameworkServlet initServletBean
信息: FrameworkServlet '': initialization completed in 17 ms
com.cyb.ssm.po.Item@1ad9b8d3

MockHttpServletRequest:
HTTP Method = GET
Request URI = /item/showEdit
Parameters = {id=[1]}
Headers = {}
Body = <no character encoding set>
Session Attrs = {}

Handler:
Type = com.cyb.ssm.controller.ItemController
Method = public org.springframework.web.servlet.ModelAndView com.cyb.ssm.controller.ItemController.showEdit(java.lang.Integer)

Async:
Async started = false
Async result = null

Resolved Exception:
Type = null

ModelAndView:
View name = item/item-edit
View = null
Attribute = item
value = com.cyb.ssm.po.Item@1ad9b8d3
errors = []

FlashMap:
Attributes = null

MockHttpServletResponse:
Status = 200
Error message = null
Headers = {Content-Language=[en]}
Content type = null
Body =
Forwarded URL = /WEB-INF/jsp/item/item-edit.jsp
Redirected URL = null
Cookies = []
===============
public org.springframework.web.servlet.ModelAndView com.cyb.ssm.controller.ItemController.showEdit(java.lang.Integer)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

广东省| 仪陇县| 襄樊市| 威宁| 青阳县| 竹山县| 十堰市| 湛江市| 平邑县| 肇州县| 徐水县| 古浪县| 翁源县| 绍兴县| 沙田区| 新津县| 宿松县| 绥德县| 奉新县| 和龙市| 清原| 阳新县| 吴桥县| 越西县| 镇江市| 琼结县| 郧西县| 平罗县| 江山市| 凌云县| 滦南县| 东平县| 渭源县| 二连浩特市| 郓城县| 彩票| 佳木斯市| 革吉县| 冀州市| 公主岭市| 沅江市|