前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用MockMvc对Spring mvc中的controller层进行单元测试

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

作者头像
克虏伯
发布2019-04-15 14:18:39
2.5K0
发布2019-04-15 14:18:39
举报

参考: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();         }     } }

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/08/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档