文档章节

spring 3.2.0ga 测试框架

韭精过敏
 韭精过敏
发布于 2012/12/20 10:57
字数 731
阅读 4.1K
收藏 9

spring3.2终于出ga版了, 发现spring test的改进最大,添加了对 springmvc的测试

看了看文档,将使用方法整理如下:

1,可以使用 @WebAppConfiguration来标明是web应用测试, @ContextConfiguration来指定配置文件,其他的和测试相同

2,主要用到三个类: 1,MockMvc及MockMvcBuilders, 用来生成当前的测试环境,后者是生成MockMvc的

                              2,MockMvcRequestBuilders , 模拟http请求

                              3,MockMvcResultMatchers ,对返回结果进行断言

3,这几个类都提供了链式操作,写代码的时候就很舒服了,代码也好看多了,下面就详细说说这几个类

3.1 MockMvcBuilders 

           这个类只有两个方法:DefaultMockMvcBuilder  webAppContextSetup(WebApplicationContext context)  和 StandaloneMockMvcBuilder standaloneSetup(Object... controllers) ,区别是 前者依赖Spring上下文,因此这个要加载配置文件

           StandaloneMockMvcBuilder 继承自 DefaultMockMvcBuilder 

           毕竟spring的配置文件中没有web.xml中那些filter的信息,无法完整模拟web环境, 因此 DefautlMockBuilder中有 addFilter(Filter filter)  和 addFilters(Filter ...)两个方法,还有一个RequestBuilder,可以定制默认的request, 还有一些 alwaysExpect() ,alwaysDo等方法,用于添加默认断言

          配置好Builder后,然后 调用build()方法 生成 MockMvc对象, 我们就可以用来测试了

3.2 MockMvcRequestBuilders 

          这个类里面全是静态方法, 提供http操作方法如: get,post,delete,put,fileupload , 还有一个request方法,可以自己指定 前面那类型, 还有一个 asyncDispatch(MvcResult mvcResult),应该是异步执行,这个方法没用过,有时间看看是干嘛用的

          这些方法返回的都是 RequestBuilder的子类, 针对不同http请求类型做了一些拓展,都是链式操作很方便的

3.2 MockMvcResultMatchers , 这个是对返回结果进行断言,也都是静态方法,链式操作, 这些方法返回的都是 ResultMather的子类

     提供的方法有:request(),handler(), model(),view(),flash(),forwardUrl(String expectUrl),redirectUrl(String expectUrl) ,status(),header(),content(),jsonPath() ,xpath(),cookie();

     jsonPath 和 xpath 是针对json和xml格式数据的,具体格式请参考 http://goessner.net/articles/JsonPath/ 这篇文章。

    jsonPath 操作依赖 jsonPath类, xpath没用过应该也有相关依赖吧


下面放一个测试例子吧 

public class SpringControllerTest {

    @Test
    public void json() throws Exception {

        MockMvc mockMvc = standaloneSetup(new PersonController()).build();
        mockMvc.perform(get("/person/Lee").accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpect(content().contentType("application/json"))
                .andExpect(jsonPath("$.name").value("Lee")).andExpect(jsonPath("$.title").value("你好"));
        mockMvc.perform(post("/p2/haha").param("title", "你好吧")).andExpect(status().is(302))
                .andExpect(view().name("redirect:/hello")).andExpect(model().attribute("title", "你好吧"));
        mockMvc.perform(get("/p2/haha2").param("title", "你好吧").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
                .andExpect(jsonPath("$.data[0].fullName").value("宝马-进口-x6"));
    }

    @Controller
    private class PersonController {

        @RequestMapping(value = "/person/{name}")
        public Object get(@PathVariable String name) {
            Map person = new HashMap();
            person.put("name", name);
            person.put("title", "你好");
            return ViewUtils.createJsonView(person);
        }

        @RequestMapping(value = "/p2/haha")
        public Object post(String name, String title) {
            Map person = new HashMap();
            person.put("name", name);
            person.put("title", title);

            return ViewUtils.createView("redirect:/hello", person);
        }

        @RequestMapping(value = "/p2/haha2",produces=MediaType.APPLICATION_JSON_VALUE+";charset=utf-8")
        @ResponseBody
        public Object getjson(String name, String title) {
            List<Car> cars = Lists.newArrayList();
            cars.add(EntityFactory.createCar("宝马-进口-x6", "x6", null, "进口"));
            JsonData data = new JsonData();
            data.setData(BeanMapper.mapList(cars, CarDTO.class));
            return data;
        }
    }
}


 

           

© 著作权归作者所有

韭精过敏

韭精过敏

粉丝 74
博文 27
码字总数 12106
作品 1
海淀
程序员
私信 提问
加载中

评论(1)

光石头
光石头
好文,占地!
好程序员java分享spring框架精讲

1、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员...

好程序员IT
2019/05/27
11
0
sping3+hibernate4框架模板

本框架以商品购物平台项目为例,用到spring3mvc和hibernate4,主要搭建步骤如下: 1、spring3MVC模板 2、集成hiebernate4模板 3、Spring集成测试模板 包含的技术: spring框架; springMVC技术...

java-苦苦甜甜
2012/10/19
751
0
Spring(一)——总体介绍

工作闲着,快速回顾一下spring框架。Spring框架,是进行对象管理,对象关联,解耦的一个中间层框架。SSH(Struts+Spring+Hibernate)三大Spring在中间就起着一个承上启下的作用。好,首先我们...

凡尘里的一根葱
2015/11/10
173
0
新书上架:《Spring Boot 开发实战》(基于 Kotlin + Gradle + Spring Boot 2.0 的企业级服务端开发实战)

新书上架:《Spring Boot 开发实战》 — 基于 Kotlin + Gradle + Spring Boot 2.0 的企业级服务端开发实战 京东下单链接 https://item.jd.com/31178320122.html 天猫下单链接 https://detail...

程序员诗人
2018/08/05
0
0
Spring之旅第一篇-初识Spring

一、概述 只要用框架开发java,一定躲不过spring,Spring是一个轻量级的Java开源框架,存在的目的是用于构建轻量级的J2EE应用。Spring的核心是控制反转(IOC)和面向切面编程(AOP)。Spring有如...

花漾年华
2019/04/30
49
0

没有更多内容

加载失败,请刷新页面

加载更多

普宁哪里可以开餐饮费发票-中国新闻网

普宁哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723687
32分钟前
21
0
资兴哪里可以开餐饮费发票-中国新闻网

资兴哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723480
41分钟前
32
0
沅江哪里可以开餐饮费发票-中国新闻网

沅江哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723685
41分钟前
36
0
天津哪里可以开餐饮费发票-中国新闻网

天津哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723617
42分钟前
33
0
汨罗哪里可以开餐饮费发票-中国新闻网

汨罗哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17060820048
42分钟前
38
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部