在SpringMVC利用MockMvc进行单元测试
spring在线文档:https://docs.spring.io/spring/docs/current/javadoc-api/index.html?index-files/index-13.html
----------------------------------------------------------------------------------------------------------------
一、应用示例
package com.springapp.mvc; 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.web.context.WebApplicationContext; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup; @RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration("file:src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml")
public class AppTests {
private MockMvc mockMvc; @SuppressWarnings("SpringJavaAutowiringInspection")
@Autowired
protected WebApplicationContext wac; @Before
public void setup() {
this.mockMvc = webAppContextSetup(this.wac).build();//获取mockMvc实例
} @Test
public void simple() throws Exception {
mockMvc.perform(post("/mytest"))//执行一个RequestBuilder请求
.andExpect(view().name("index2"))//验证返回视图是否是"index2"
.andDo(print()).andExpect(status().isOk());//打印结果到控制台
} }
二、代码解释
@WebAppConfiguration
@WebAppConfiguration
is a class-level annotation that is used to declare that the ApplicationContext
loaded for an integration test should be a WebApplicationContext
.
其中文意思是:“@webappconfiguration是一级注释,用于声明一个ApplicationContext集成测试加载WebApplicationContext。”
private MockMvc mockMvc;
Main entry point for server-side Spring MVC test support.
其中文意思是:对于服务器端的Spring MVC测试支持主入口点。
该对象可以由方法webAppContextSetup(WebApplicationContext context).build()构造。
org.springframework.test.web.servlet.setup.MockMvcBuilders
先介绍些:MockMvcBuilder,MockMvcBuilder是用来构造MockMvc的构造器,其主要有两个实现:StandaloneMockMvcBuilder和DefaultMockMvcBuilder,分别对应之前的两种测试方式。对于我们来说直接使用静态工厂MockMvcBuilders创建即可(注:MockMvcBuilders在官方文档中并未找到):
MockMvcBuilders.webAppContextSetup(WebApplicationContext context):指定WebApplicationContext,将会从该上下文获取相应的控制器并得到相应的MockMvc;
MockMvcBuilders.standaloneSetup(Object... controllers):通过参数指定一组控制器,这样就不需要从上下文获取了。
simple方法中的代码中的方法:
perform:执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理;
andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确;
andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台;
后记:更多参加spring的官方文档
附:另一种测试
package com.spring.test; import com.wql.dao.UserMapper;
import com.wql.vo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; /**
* Created by Administrator on 15-12-11.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public class SqlTests {
@Resource
private UserMapper userMapper; @Test
public void test(){
User u = userMapper.selectByPrimaryKey(1);
System.out.println(u);
} @Test
public void test2(){
User u = new User();
u.setName("wang");
u.setPassword("112");
System.out.println(userMapper.checkLogin(u));
} }
最新文章
- SVN基本指令
- Java NIO 系列教程
- AngularJS快速入门指南13:表单
- C++11 并发指南六(atomic 类型详解三 std::atomic (续))
- 改Bug
- 记录网上资源URL
- YouTube视频代码总结
- public static void main(string[] args)解释
- mongoTemplate查询大数据过慢
- linux 安装配置zookeeper
- Mysql常用函数总结(二)
- 关于django1.7.7使用ajax后出现“CSRF token missing or incorrect”问题的解决办法
- WIN10平板 如何关闭自动更新
- jenkins 多选参数构建配置
- C#基础之静态和非静态的区别
- 用javascript的isNan()函数,可以判断是否为数字
- C# user32.dll
- Java50道经典习题-程序18 乒乓球赛
- WCF-异步调用和两种客户端形式
- 测试类异常Manual close is not allowed over a Spring managed SqlSession