热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用MockMvc对Springmvc中的controller层进行单元测试

2019独角兽企业重金招聘Python工程师标准参考:http:sishuok.comforumpostslist7981.html;http:www.tuic

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

参考:http://sishuok.com/forum/posts/list/7981.html  ;  http://www.tuicool.com/articles/6nqeIbm

用下面的这种方式,不需要启动tomcat服务器。

由于不好的叙述,在这就只是简单的描述了。

 

首先实体类User:

public class User {
    private int id;
    private String name;
    private int age;
    private String email;

 ......get、set、toString方法省略.....

}

UserController的代码如下:

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.mjduan.learnMockMvc.entity.User;
import com.mjduan.learnMockMvc.service.UserService;
import com.mjduan.learnMockMvc.util.outUtil.Out;

@Controller
@RequestMapping("/UserController")
public class UserController {

    @Autowired
    @Qualifier("UserService")
    private UserService userService;
    
    @RequestMapping("/login")
    public ModelAndView login(HttpServletRequest request,
            HttpServletResponse response) throws UnsupportedEncodingException{
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("name").trim();
        String password = request.getParameter("password").trim();
        Out.println("接收到的name:"+name+"/ password:"+password);
        
        ModelAndView modelAndView = new ModelAndView();
        
        User user = this.userService.getUserById(10012);
        
        modelAndView.addObject("user", user);
        modelAndView.setViewName("/jsp/success.jsp");
        return modelAndView;
    }
    
}

 

之后就是对UserController进行单元测试的UserControllerTest:

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

import com.mjduan.learnMockMvc.controller.UserController;
import com.mjduan.learnMockMvc.entity.User;
import com.mjduan.learnMockMvc.util.outUtil.Out;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:SpringApplicationContext.xml"})
public class UserControllerTest {
    
    @Autowired
    ApplicationContext ctx;
    
    private MockMvc mockMvc;
    
    private UserController userController;
    
    @Before
    public void before(){
        //从spring容器中获得UserController对象
        userController = (UserController) ctx.getBean("userController");
        
        //MockMvcBuilders.standaloneSetup模拟一个Mvc测试环境,通过build得到一个MockMvc
        //独立测试方式,不需要启动tomcat服务器
        mockMvc = MockMvcBuilders.standaloneSetup(userController).build();
    }
    
    @Test
    public void testLogin(){
        try {                                     //通过post方法来模拟post请求方式
            MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/UserController/login")
                    .param("name", "jack") //设置请求参数为name=jack
                    .param("password", "123456")) //设置请求参数为password=123456
                    .andExpect(MockMvcResultMatchers.view().name("/jsp/success.jsp")) //期望返回的ModelAndView中的viewName是/jsp/success.jsp
                    .andExpect(MockMvcResultMatchers.model().attributeExists("user")) //期望返回的ModelAndView中含有数据user(user是一个key)
                    .andExpect(MockMvcResultMatchers.model().attributeDoesNotExist("list")) //期望返回的ModelAndView中没有数据list
                    .andReturn();
            
            //请求执行完毕之后所有的结果保存在mvcResult中
            User user = (User) mvcResult.getModelAndView().getModel().get("user");
            Out.println("得打的user:"+user.toString());
            //Assert.assertNotNull(object);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
    }
}
 

 

 


转:https://my.oschina.net/u/2518341/blog/725375



推荐阅读
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
author-avatar
眭嘀佶毅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有