Spring框架单元测试
来源:互联网 发布:javascript计算器代码 编辑:程序博客网 时间:2024/06/06 03:05
测试普通java项目我们知道使用的是junit4进行单元测试,但是对于web项目该怎么做呢,总不能用服务器运行项目一个个测吧 那样过于麻烦,下面给出我的解决方式
Spring 为我们提供了MockMvc这个用于测试的类
@RunWith: 告诉Junit使用 Spring-Test 框架, 允许加载web 应用程序上下文。
@WebAppConfiguration: 表明该类会使用web应用程序的默认根目录来载入ApplicationContext, value = “src/main/webapp” 可以不填,默认此目录
@ContextConfiguration: 指定需要加载的spring配置文件的地址 (“file:src/main/resources/applicationContext.xml”)
@Autowired WebApplicationContext wac:注入web环境的ApplicationContext容器;
使用MockMvcBuilders.webAppContextSetup(wac).build()来创建一个MockMvc进行测试, 此为模拟真实的Spring MVC环境
Before test
初始化Mock对象, 通过MockMvcBuilders.standaloneSetup模拟一个Mvc测试环境,注入controller, 通过build得到一个MockMvc, 后面就用MockMvc的一些API做测试。
这不是真实的Spring MVC环境,如果要模拟真实环境需要用 MockMvcBuilders.webAppContextSetup(webApplicationContext).build()
但也可直接加载你要测试的Controller 就不需要webAppContextSetUp了
方法介绍:
perform:执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理;
get:声明发送一个get请求的方法。MockHttpServletRequestBuilder get(String urlTemplate, Object… urlVariables):根据uri模板和uri变量值得到一个GET请求方式的。另外提供了其他的请求的方法,如:post、put、delete等。
param:添加request的参数,如上面发送请求的时候带上了了pcode = root的参数。假如使用需要发送json数据格式的时将不能使用这种方式,可见后面被@ResponseBody注解参数的解决方法
andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确(对返回的数据进行的判断);
andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台(对返回的数据进行的判断);
andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理(对返回的数据进行的判断)
下面给出我工作上 简单的测试demo
@RunWith(SpringJUnit4ClassRunner.class)@WebAppConfiguration@ContextConfiguration(locations = {"classpath:spring/spring-context.xml"})//不要重复加载public class CityWarehouseControllerTest { @Resource CityWarehouseController cityWarehouseController; protected MockMvc mockMvc; @Before public void setUp() { mockMvc = MockMvcBuilders.standaloneSetup(cityWarehouseController).build(); } /* * 测试城市列表 dongshuo test * */ @Test public void testCityData () throws Exception { MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders .post("/cityData") .contentType(MediaType.APPLICATION_JSON_UTF8) .accept(MediaType.APPLICATION_JSON_UTF8)).andReturn(); MockHttpServletResponse response = mvcResult.getResponse(); int status = response.getStatus(); String content = response.getContentAsString(); Assert.assertEquals(200,status);//请求状态是200 即为请求成功 Assert.assertNotNull(content);//返回值不为空 //System.out.println(content);//如果不为空,打印返回值 }}
但对与传进来的是@RequestBody 的javabean 就需要转为json 进行转化 可以到我的工具类里寻找 jsonutils
/* * dongshuo test * 测试SKU 实际销量预测销量图展示 * * */ @Test public void testChartForSKU () throws Exception { SkuParamVo skuParamVo = new SkuParamVo(); skuParamVo.setWid("10002"); skuParamVo.setDcid("13"); skuParamVo.setForecastDays("1"); skuParamVo.setDateType("1"); String jsonParamVo = JsonUtil.objectToJson(skuParamVo); String contentAsString = mockMvc.perform(MockMvcRequestBuilders .post("/chartForSKU") .contentType(MediaType.APPLICATION_JSON_UTF8) .accept(MediaType.APPLICATION_JSON_UTF8) .content(jsonParamVo)) .andExpect(MockMvcResultMatchers.status().isOk()) .andDo(MockMvcResultHandlers.print()) .andReturn().getResponse().getContentAsString(); // System.out.println("testChartForSKU:"+contentAsString); }
期间出现了 servlet-api 不兼容问题
javax.servlet.http.HttpServletRequest.isAsyncStarted()Z
- spring 单元测试框架
- spring框架下单元测试
- junit Spring框架 单元测试
- Spring框架单元测试
- spring框架_03 junit单元测试
- Junit单元测试Spring框架接口
- Spring框架整合Junit单元测试框架
- Spring框架下基于事务的单元测试
- Spring框架下的单元测试方法
- spring框架学习(三)junit单元测试
- Spring框架下的Junit单元测试
- spring框架学习(三)junit单元测试
- spring框架学习(三)junit单元测试
- Spring框架下的单元测试方法
- spring框架学习(三)junit单元测试
- spring框架学习(三)junit单元测试
- spring框架(三)junit单元测试
- 浅谈Spring测试框架+junit4单元测试原理
- JAVA检查是否为乱码
- java synchronized详解
- java8新特性--optional
- jQuery设计思想
- Disable KendoGrid editing
- Spring框架单元测试
- 基于ruby+selenium的第三方广告检测
- Asp修改GridView中的数据变通方法
- VS.Net中程序集的Debug版本和Release版本的区别
- GIT学习
- ping和telnet
- openCV学习笔记 (六) : 改变图像的对比度和亮度
- brpop read error on connection
- ELK 之 Logstash