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

首頁 > 學院 > 開發設計 > 正文

Spring MVC Controller 單元測試

2019-11-14 21:06:15
字體:
來源:轉載
供稿:網友
SPRing MVC Controller 單元測試
簡介

Controller層的單元測試可以使得應用的可靠性得到提升,雖然這使得開發的時間有所增加,有得必失,這里我認為得到的比失去的多很多。

Sping MVC3.2版本之后的單元測試方法有所變化,隨著功能的提升,單元測試更加的簡單高效。

這里以4.1版本為例,記錄Controller的單元測試流程。非常值得參考的是Spring MVC Showcase(https://github.com/spring-projects/spring-mvc-showcase),它當前的版本使用的是4.1.0,以后會有所變動,為了使項目能夠運行,請以它更新的配置為參考。

我用的IDE是IntelliJ IDEA13,我個人認為比Eclipse好用很多,是付費的,很貴!

項目結構

使用maven構建項目,項目結構如下:

在Controller層的測試不需要寫單獨的Spring config,可以直接使用src/main/java中的.xml

這里記錄一下,Spring Mvc context的配置策略:

好多的小伙伴都會在一個文件(e.g spring-mvc.xml)中配置很多的東西,來看看showcase中web的配置結構

  • WEB-INF
    • web.xml (文件)
    • spring (文件夾)

      • root-context.xml (文件,放置能夠被servlet和filter共享使用的資源)
      • appServlet (目錄)
        • controllers.xml(文件,與Controller相關的配置)
        • servlet-context.xml (文件,放置有servlet使用的資源)

Spring mvc是對Servlet的包裝,使其能夠結構化,流程化。

 1 <web-app xmlns="http://java.sun.com/xml/ns/javaee" 2  3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4  5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 6  7 version="3.0"> 8  9 <!-- The definition of the Root Spring Container shared by all Servlets and Filters -->10 11 <context-param>12 13 <param-name>contextConfigLocation</param-name>14 15 <param-value>/WEB-INF/spring/root-context.xml</param-value>16 17 </context-param>18 19 <!-- Creates the Spring Container shared by all Servlets and Filters -->20 21 <listener>22 23 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>24 25 </listener>26 27 <filter>28 29 <filter-name>csrfFilter</filter-name>30 31 <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>32 33 <async-supported>true</async-supported>34 35 </filter>36 37 <filter-mapping>38 39 <filter-name>csrfFilter</filter-name>40 41 <url-pattern>/*</url-pattern>42 43 </filter-mapping>44 45 <!-- Processes application requests -->46 47 <servlet>48 49 <servlet-name>appServlet</servlet-name>50 51 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>52 53 <init-param>54 55 <param-name>contextConfigLocation</param-name>56 57 <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>58 59 </init-param>60 61 <load-on-startup>1</load-on-startup>62 63 <async-supported>true</async-supported>64 65 </servlet>66 67 <servlet-mapping>68 69 <servlet-name>appServlet</servlet-name>70 71 <url-pattern>/</url-pattern>72 73 </servlet-mapping>74 75 <!-- Disables Servlet Container welcome file handling. Needed for compatibility with Servlet 3.0 and Tomcat 7.0 -->76 77 <welcome-file-list>78 79 <welcome-file></welcome-file>80 81 </welcome-file-list>82 83 </web-app>

可以看到分開配置,使得文件的作用更加的明了。

這部分的配置文件是來配置web context 的,項目中還有其他的module ,如DAO,Service,他們對應的applicationContext文件會被放在src/main/resource目錄下。

完善的單元測試當然還有service的單元測試,這里就不說了,但是Controller的單元測試還需要調用service和DAO,要注意Service和DAO的applicationContext的引入。

Controller 單元測試

在測試類中包含這三個注釋,看起表面意思不難理解他們的作用,主要理解ContextConfiguration的使用。

@RunWith(SpringJUnit4ClassRunner.class)

@WebAppConfiguration //默認是src/main/webapp

@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml")

注意:這里的@ContextConfiguration只解析了servlet-context.xml,如果項目中還存在其他模塊的applicationContext,也需要把他們引進來否則得到的Service就是null的。

例如

@ContextConfiguration({

"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml",

“classpath*: springxml/**.xml”

})

在加上其他的一點代碼就可以完成一個Controller的單元測試,下面是一個例子,更多例子請參考showcase中的內容。

package pairwinter.spring.mvc.controller.test;import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.samples.mvc.AbstractContextControllerTests;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.test.web.servlet.MockMvc;@RunWith(SpringJUnit4ClassRunner.class)@WebAppConfiguration@ContextConfiguration({"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml",“classpath*: springxml/**.xml”})public class ControllerTests{@Autowiredprivate WebApplicationContext wac;private MockMvc mockMvc;@Beforepublic void setup() throws Exception {this.mockMvc = webAppContextSetup(this.wac).build();}@Testpublic void controllerExceptionHandler() throws Exception {this.mockMvc.perform(get("/test")).andExpect(status().isOk());}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品视频在线播放| 亚洲精品国产美女| 亚洲另类xxxx| 亚洲欧美国产日韩天堂区| 国产在线观看91精品一区| 精品国产一区二区三区久久| 久久中文久久字幕| 成人免费淫片aa视频免费| 日韩欧美亚洲成人| 亚洲高清久久久久久| 精品国偷自产在线视频99| 国产精品jvid在线观看蜜臀| 精品国产一区二区三区在线观看| 日韩av电影手机在线观看| 97视频网站入口| 亚洲女在线观看| 国产美女高潮久久白浆| 国产精品视频xxx| 日本在线精品视频| 成人免费xxxxx在线观看| 97国产在线观看| 日本国产高清不卡| 国产激情综合五月久久| 97超视频免费观看| 一区二区三区精品99久久| 一区二区三区四区在线观看视频| 久久久之久亚州精品露出| 中文字幕久久精品| 亚洲性视频网站| 热re91久久精品国99热蜜臀| 精品久久久久久久久久久久久久| 最新国产成人av网站网址麻豆| 国产精品最新在线观看| 欧美日韩性生活视频| 国产精品自拍小视频| 久久视频在线视频| 一区二区三区视频免费在线观看| 亚洲人成在线电影| 欧美大秀在线观看| 精品久久久久久中文字幕一区奶水| 青青草原一区二区| 91tv亚洲精品香蕉国产一区7ujn| 久久青草精品视频免费观看| 欧美国产日韩一区二区| 日韩免费在线播放| 成人在线国产精品| 亚洲精品日韩激情在线电影| 久久人人爽人人爽人人片av高清| 欧洲s码亚洲m码精品一区| 日韩美女激情视频| 欧美性高跟鞋xxxxhd| 日韩中文字幕在线视频播放| 亚洲欧美国产精品专区久久| 少妇高潮 亚洲精品| 欧美极品少妇xxxxⅹ喷水| 亚洲永久在线观看| 亚洲免费小视频| 国产精品亚洲网站| 欧美在线影院在线视频| 国内免费精品永久在线视频| 日韩欧美a级成人黄色| 国产一区二区三区毛片| 欧美日韩美女在线观看| 91在线视频一区| 97在线免费观看| 激情久久av一区av二区av三区| 日韩成人久久久| 日本一区二区三区在线播放| 久久久久久久91| 性日韩欧美在线视频| 亚洲亚裔videos黑人hd| 国产99视频精品免视看7| 欧美日韩性视频| 欧美一级大胆视频| 精品视频9999| 日韩少妇与小伙激情| 91大神在线播放精品| 国产欧美久久久久久| 国产精品美女在线| 欧美日韩另类在线| 国产精品999999| 国产999精品久久久| 91最新国产视频| 亚洲欧洲午夜一线一品| 日韩国产欧美精品一区二区三区| 九九九热精品免费视频观看网站| 中文字幕综合在线| 国内精品国产三级国产在线专| 美日韩在线视频| 亚洲欧美资源在线| 日本久久久久亚洲中字幕| 亚洲激情在线视频| 日本亚洲精品在线观看| 久久精彩免费视频| 欧美日韩福利电影| 亚洲第一综合天堂另类专| 日韩av快播网址| 久久全球大尺度高清视频| 国产精品欧美日韩一区二区| 97精品久久久中文字幕免费| 久久的精品视频| 亚洲精品网站在线播放gif| 久久精品国产96久久久香蕉| 日韩三级影视基地| 久久精品亚洲一区| 久久综合色88| 欧美性xxxxx极品娇小| 国产亚洲美女精品久久久| 一区二区三区www| 欧美另类第一页| 国产噜噜噜噜久久久久久久久| 日韩在线播放av| 欧美丰满少妇xxxxx做受| 最近2019中文字幕大全第二页| 韩国视频理论视频久久| 亚洲欧美三级伦理| 日韩在线观看高清| 91精品国产综合久久香蕉| 日韩在线免费视频| 亚洲偷欧美偷国内偷| 久久久久久久久久久av| 2021久久精品国产99国产精品| 亚洲精品美女久久久久| 亚洲精品福利在线| 色天天综合狠狠色| 久久久国产精彩视频美女艺术照福利| 国产午夜精品一区二区三区| 欧美日韩第一视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 中文字幕亚洲一区在线观看| 国内精品中文字幕| 亚洲在线视频观看| 亚洲欧美福利视频| 欧美另类高清videos| 精品国产福利视频| 欧美巨乳美女视频| 精品国产欧美成人夜夜嗨| 日韩电影在线观看永久视频免费网站| 亚洲va久久久噜噜噜久久天堂| 亚洲乱亚洲乱妇无码| 久久久久久久一区二区三区| 欧美电影在线观看| 亚洲va国产va天堂va久久| 911国产网站尤物在线观看| 91精品久久久久久久久久久久久| 色狠狠av一区二区三区香蕉蜜桃| 在线视频日韩精品| 日韩精品欧美国产精品忘忧草| 91中文在线视频| 日韩视频―中文字幕| 亚洲精品之草原avav久久| 国产日韩欧美在线播放| 91欧美日韩一区| 久久精品亚洲94久久精品| 国产极品jizzhd欧美| 国产在线精品播放| 亚洲欧美中文字幕| 日韩美女毛茸茸| 国产亚洲视频中文字幕视频| 欧美午夜视频在线观看| 国产成人aa精品一区在线播放| 久青草国产97香蕉在线视频| 97精品国产97久久久久久春色| 在线观看日韩专区|