`
samwalt
  • 浏览: 285508 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring 3.2.0ga 测试框架(转)

    博客分类:
  • java
 
阅读更多
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;
        }
    }
}
分享到:
评论

相关推荐

    richfaces-ui-3.2.0.GA

    7. **整合其他技术**:RichFaces 可以与 Spring、Hibernate 等其他流行框架无缝集成,提供更强大的企业级应用解决方案。 综上所述,"richfaces-ui-3.2.0.GA" 是一个用于构建 AJAX 驱动的富互联网应用程序的 JSF ...

    Spring3+Hibernate4+Struts2 jar包 SSH框架

    spring 3.2.0+hibernate 4.1.6+struts2整合需要的jar包 的目录 antlr-2.7.7.jar aopalliance-1.0.jar asm-3.3.jar asm-commons-3.3.jar aspectjweaver-1.5.3.jar bonecp-0.7.1.RELEASE.jar cglib-2.1.3.jar ...

    Spring3.2Jar官方jar包

    1. **spring-core-3.2.0.RELEASE.jar**:这是Spring框架的核心模块,包含了IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)的基础实现。IoC容器管理对象的生命周期和依赖...

    SpringMVC+Spring+Mybatis+Mysql框架所需jar包

    SSM框架,即SpringMVC、Spring和Mybatis的组合,是Java开发中常见的Web应用程序框架。这个压缩包包含了这三大框架以及Mysql数据库连接所需的jar包,它们各自扮演着关键的角色,使得开发者能够构建出高效、灵活且可...

    springmvc和mybatis整合jar包

    2. **spring-core-3.2.0.RELEASE.jar**:这是Spring框架的核心模块,提供了基本的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)功能,是其他所有Spring模块的基础。 3. **spring-...

    spring+springmvc+hibernate+redis 需要的jar包

    在提供的jar包中,`spring-core-3.2.0.RELEASE.jar`是Spring框架的核心模块,包括基本的IoC容器和Bean工厂;`spring-context-3.2.0.RELEASE.jar`则提供了更高级的应用上下文功能,支持国际化、事件传播等;`spring-...

    spring MVC配置详解

    在使用 Spring MVC 之前,需要引入相应的 jar 包,包括 Spring 2.5.6 和 Hibernate 3.2.0。Spring 2.5.6 需要引入的 jar 包有 spring.jar、spring-webmvc.jar、commons-logging.jar、cglib-nodep-2.1_3.jar 等。...

    SpringMVC框架搭建及详解.pdf

    要搭建Spring MVC环境,需要引入相关的jar包,包括Spring 2.5.6和Hibernate 3.2.0。具体来说,需要引入以下jar包: * Spring 2.5.6:spring.jar、spring-webmvc.jar、commons-logging.jar、cglib-nodep-2.1_3.jar *...

    Spring+SpringMVC+Hibernate的jar包集合

    在这个集合中,`spring-core-3.2.0.RELEASE.jar`和`spring-context-3.2.0.RELEASE.jar`是Spring框架的核心部分,负责对象的创建和管理,以及上下文环境的维护。 SpringMVC是Spring框架的一部分,专为Web开发设计,...

    SpringMVC+Spring+Mybatis+Mysql所需lib包

    - `spring-core-3.2.0.RELEASE.jar`: 这是Spring框架的核心模块,包含了IoC(Inversion of Control)容器和基本的类工具支持。 - `spring-context-3.2.0.RELEASE.jar`: 提供了应用上下文,这是Spring框架的基础,...

    struts2+spring3+hibernate3+jquery+springside 做一个OA2

    标题 "struts2+spring3+hibernate3+jquery+springside 做一个OA2" 提供了一个综合的Web开发框架组合,用于构建一个办公自动化(OA)系统。这个系统基于以下技术栈: 1. **Struts2**: Struts2是一个Java Web MVC...

    Sping MVC所需所有架包

    4. `spring-context-3.2.0.M1.jar`:Spring上下文模块,提供了一种框架来管理应用对象的生命周期和依赖关系,同时也包含了事件处理、国际化、资源访问等功能,是Spring MVC运行的基础。 5. `javassist-3.12.0.GA....

    mysql-ssh框架全部jar包

    `spring-core-3.2.0.RELEASE.jar`和`spring-context-3.2.0.RELEASE.jar`是Spring框架的核心组件,包含了IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)的支持。...

    ssh框架整合包

    `spring-context-3.2.0.M1.jar`和`spring-beans-3.2.0.M1.jar`分别包含了Spring的应用上下文模块和Bean模块,它们负责管理对象的生命周期和装配。Spring还提供了对数据访问、事务管理、邮件服务等的支持。 Struts2...

    搭建SSH框架所需的jar包

    在给定的文件列表中,"spring-context-3.2.0.M1.jar"和"spring-beans-3.2.0.M1.jar"是Spring框架的核心组成部分,它们负责管理对象的生命周期和配置,以及对象之间的依赖关系。Spring的这些jar包使得开发者可以更...

    Spring+Hibernate+Struts2的jar包

    `hibernate-3.2.0.ga.jar`是Hibernate 3.2版本,具备了对象关系映射(ORM)、查询语言(HQL)以及 Criteria 查询等功能。它使得开发者可以避免编写大量的SQL代码,专注于业务逻辑。 Struts2作为MVC(Model-View-...

    hibernate开发框架集(核心3.3.2GA+an3.4+slf4j1.5.8+api文档)

    对于开发基于SSH(Spring、Struts、Hibernate)的Java Web应用,或者任何需要ORM解决方案的Java EE项目,这套框架集都能提供强大的支持。开发者可以根据需求选择性导入,大大提高了开发效率和项目的可维护性。通过...

    ssm必须jar包

    Spring通过容器管理对象的生命周期和依赖关系,使得代码更加灵活和可测试。 4. `spring-context-3.2.0.RELEASE.jar`:Spring上下文模块,提供了应用环境和依赖注入的扩展,包括国际化、事件传播、AOP、资源访问等。...

    SpringMVC+Mybatis.jar

    7. **spring-core-3.2.0.RELEASE.jar** 和 **spring-context-3.2.0.RELEASE.jar**:这两个是Spring框架的核心组件。`spring-core`包含了Spring的基础功能,如IoC容器和资源处理;`spring-context`则提供了应用上下文...

Global site tag (gtag.js) - Google Analytics