关于Spring中Controller的单元测试
2017-08-30 14:33
204 查看
第一次写对Controller的单元测试,在不了解的情况下被自己的无知给坑了,下面给出写法。
这里使用的是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));
这里可以对session, servletPath等request属性进行设置值
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
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));
这里可以对session, servletPath等request属性进行设置值
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
相关文章推荐
- SpringMVC Controller单元测试静态引入通配符问题
- 关于Spring的Controller及Struts的Action的多线程的注意
- SpringMVC Controller单元测试静态引入通配符问题
- 关于Spring.net注入Controller时参数为空的问题。
- Spring mvc Controller单元测试
- SpringMVC Controller单元测试静态引入通配符问题
- 关于Spring的Controller及Struts的Action的多线程的注意
- (转载)Spring源码--关于AccessController.doPrivileged
- SpringMVC Controller单元测试静态引入通配符问题
- 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)
- 关于在 Spring 中对 DAO 进行单元测试的一些问题
- SpringMVC Controller单元测试静态引入通配符问题
- 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)
- spring MVC controller 的单元测试 第一部分:配置
- SpringMVC Controller单元测试静态引入通配符问题
- 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)
- 单元测试:(三) powermock + spring mvc mock 对 controller 层自动化测试入门
- 关于Spring的Controller及Struts的Action的多线程的注意
- 初学spring3,关于MultiActionController的使用和配置
- 关于spring+hibernate中的单元测试问题