一. 点睛
测试是保证软件质量的关键,在之前的讲解中只是介绍了简单的测试,下面要进行一些和Spring
MVC
相关的测试,主要涉及控制器的测试。
为了测试Web
项目通常不需要启动项目,我们需要一些Servlet
相关的模拟对象,比如:MockMVC
,MockHttpServletRequest
,MockHttpServletResponse
,MockHttpSession
等。
在Spring
里,我们使用@WebAppConfiguration
指定加载的ApplicationContext
是一个WebAppConfiguration
。
在下面的示例里面借助JUnit
和Spring TestContext framework
,分别演示对普通页面转向形控制器和RestController
进行测试。
二. 示例:
- 测试依赖
1 | 复制代码 <!-- spring-test --> |
代码解释:
这里
<scope>test</scope>
说明这些包的存活是在test
周期,也就是意味着发布时我们将不包含这些jar
包。
- 演示服务:
在src/main/java
下新增DemoService
类,代码如下所示:
1 | 复制代码package org.light4j.springMvc4.service; |
- 测试用例
在src/test/java
下新建TestControllerIntegrationTests
类,代码如下:
1 | 复制代码package org.light4j.springMvc4.web; |
代码解释:
①
@WebAppConfiguration
注解在类上,用来声明加载的ApplicationContext
是一个WebApplicationContext
。它的属性指定的是Web
资源的位置,默认为src/main/webapp
,本例修改为src/main/resource
。
②MockMvc
模拟MVC
对象,通过MockMvcBuilders.webAppContextSetup(this.wac).build()
进行初始化。
③ 可以在测试用例中注入Spring
的Bean
。
④ 可注入WebApplicationContext
。
⑤ 可注入模拟的http session
,此处仅作演示,没有使用。
⑥ 可注入模拟的http request
,此处仅作演示,没有使用。
⑦@Before
在测试开始前进行的初始化工作。
⑧ 模拟向/normal
进行get
请求。
⑨ 预期控制返回状态为200
.
⑩ 预期view
的名称为page
。
11 预期页面转向的真正路径为/WEB-INF/classes/views/page.jsp
。
12 预期model
里面的值是demoService.saySomething()
返回值hello
。
13.模拟向/testRest
进行get
请求。
14 预期返回值的媒体类型是text/plain;charset=UTF-8
。
15 预期返回值的内容为demoService.saySomething()
返回值hello
。
此时,运行该测试,效果如下图所示:
- 编写普通控制器
在src/main/java
下新增NormalController
类,代码如下所示:
1 | 复制代码package org.light4j.springMvc4.web; |
- 编写普通控制器的演示页面
在src/main/resources/view
下新建page.jsp
1 | 复制代码<%@ page language="java" contentType="text/html; charset=UTF-8" |
- 编写RestController控制器
在src/main/java
下新增RestController
类,代码如下所示:
1 | 复制代码package org.light4j.springMvc4.web; |
- 运行测试
效果如下图所示:
三. 源代码示例:
打赏 欢迎关注人生设计师的微信公众账号
公众号ID:longjiazuoA
本文转载自: 掘金