关于Spring中Controller的单元测试
来源:互联网 发布:手机淘宝怎么上传宝贝 编辑:程序博客网 时间:2024/06/07 16:03
第一次写对Controller的单元测试,在不了解的情况下被自己的无知给坑了,下面给出写法。
package com.alipay.marketingservice.action;import com.alibaba.fastjson.JSON;import com.alipay.marketingservice.util.ConstantManager;import com.alipay.opbiservice.vo.UserVo;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.mock.web.MockHttpSession;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.TestExecutionListeners;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;import org.springframework.test.context.web.WebAppConfiguration;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.MvcResult;import org.springframework.test.web.servlet.ResultActions;import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import org.springframework.test.web.servlet.setup.MockMvcBuilders;import javax.annotation.Resource;import java.util.ArrayList;import java.util.Calendar;import java.util.List;import java.util.Map;@WebAppConfiguration@RunWith(SpringJUnit4ClassRunner.class)@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class })@ContextConfiguration(locations = "classpath:META-INF/spring/*.xml")public class ExportActionTest { @Resource private MerchantAction merchantAction; @Resource private ExportAction exportAction; private MockMvc mockMvc; private MockMvc mockMvc2; private MockHttpSession session; @Before public void setUp(){ mockMvc = MockMvcBuilders.standaloneSetup(merchantAction).build(); mockMvc2 = MockMvcBuilders.standaloneSetup(exportAction).build(); session = new MockHttpSession(); } @Test public void test()throws Exception{ //自定义request跳过权限检查 UserVo userVo = new UserVo(); List permission = new ArrayList(); //在这里添加需要访问的权限接口 permission.add("***_***"); permission.add("***_get***"); userVo.setPermission(permission); //设置session session.setAttribute("id", JSON.toJSONString(userVo)); //设置时间 Calendar calendar = Calendar.getInstance(); calendar.set(2017, 7, 1); Long beginDate = calendar.getTimeInMillis(); calendar.set(2017, 9, 1); Long endDate = calendar.getTimeInMillis(); //通过接口获取商家名 ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.post("/***/get***.action").session(session).servletPath("/***/get***.action")); MvcResult mvcResult = resultActions.andReturn(); String result1 = mvcResult.getResponse().getContentAsString(); Map map0 = (Map) JSON.parse(result1); Map map = (Map) map0.get("data"); if(map == null){ System.out.println("没获取到商家"); } Map<String, Object> map2 = ((List<Map<String, Object>>)map.get("mer**")).get(0); String id = (String) map2.get("id"); String name = (String) map2.get("name"); String merchant = id + "," + name; //设置导出选项 //调用方法 ResultActions resultActions2 = this.mockMvc2.perform(MockMvcRequestBuilders.post("/***/***.action").servletPath("/***/***.action").session(session).param("beginDate", beginDate.toString()) .param("en**", endDate.toString()).param("mer**", merchant) .param("op**[]", "***", "***", "***", "***", "***", "***", "***", "***")); MvcResult mvcResult2 = resultActions2.andReturn(); String result2 = mvcResult2.getResponse().getContentAsString(); String resultExcel = new String(result2.getBytes("ISO-8859-1"), "UTF-8"); System.out.println(resultExcel); }}
这里使用的是MockMVC,其实我一开始还画蛇添足自定义了request,并设置值,后来发现MockMVC中应该内置了request,具体源码我还没看,等之后闲下来的时候再慢慢整理,(*^_^*)
private MockHttpServletRequest request;private MockHttpServletResponse response;request = new MockHttpServletRequest();request.setCharacterEncoding("UTF-8");request.setServletPath("/***/***.action");response = new MockHttpServletResponse();
这里注意的是不要这样对session设置值
request.getSession().setAttribute(ConstantManager.SESSION_USER, JSON.toJSONString(userVo));
ResultActions resultActions2 = this.mockMvc2.perform(MockMvcRequestBuilders.post("/***/***.action").servletPath("/***/***.action").session(session).param("beginDate", beginDate.toString()) .param("en**", endDate.toString()).param("mer**", merchant) .param("op**[]", "***", "***", "***", "***", "***", "***", "***", "***"));
public MockHttpServletRequestBuilder param(String name, String... values) {addToMultiValueMap(this.parameters, name, values);return this;}
好啦,就是这么多,更多的内容根据自己的需求自己探索,结果总是让人快乐的。O(∩_∩)O
阅读全文
0 0
- 关于Spring中Controller的单元测试
- Spring入门21 - Controller的单元测试
- Spring MVC Controller 单元测试
- Spring-Controller单元测试
- Spring-Controller单元测试
- Spring Mvc controller单元测试
- spring MVC controller 的单元测试 第一部分:配置
- spring webmvc如何编写service 和controller的单元测试
- 使用Mock 对spring mvc 的controller层进行单元测试
- 对Controller的单元测试
- SpringMVC中web层controller的单元测试小demo
- 关于spring mvc Controller的几个注解
- 关于spring mvc Controller的几个注解
- Controller 使用RestTemplate进行单元测试 spring mvc
- Junit对Spring Controller进行单元测试
- spring MVC mock类单元测试(controller)
- spring mvc中常用的几个controller
- spring mvc中常见的几个controller
- redis作为mybatis的二级缓存,此时二级缓存可以作为高并发缓存吗
- 音频和视频处理
- 2017第11届广西国际社会公共安全产品暨智慧城市产品展览会会刊(参展商名录)
- Android Studio中怎么使用DDMS工具?
- 一步步构建大型网站架构
- 关于Spring中Controller的单元测试
- What is the healthiest thing you've done for your marriage?
- 横向ListView(三) —— 添加头/尾视图及居中显示
- JVM整体结构
- ASP.NET 访问文件夹权限不足,System.UnauthorizedAccessException拒绝访问的处理方法
- 第三章——视图和视图层级
- 关卡设计快速入门_3. 创建一个新关卡
- React 中from 表单提交,自动化校验
- 优秀技术文章集合