• 就是这么简单(续)!使用 RestAssuredMockMvc 测试 Spring MVC Controllers(转)


    接我前面一篇文章关于RestAssured测试Restful web service的, RestAssured还有一个功能, 使用RestAssuredMockMvc 单元测试你的Spring MVC Controllers, 这个MockMvc 是建立在Spring MockMvc基础上的, 其目的是让我们用起来更便捷。

    Getting Ready

    复制代码
    <dependency>
            <groupId>com.jayway.restassured</groupId>
            <artifactId>spring-mock-mvc</artifactId>
            <version>2.4.0</version>
            <scope>test</scope>
        </dependency>
    
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        
        <!-- Optional -->
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
            <version>1.3</version>
            <scope>test</scope>
        </dependency>
    
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-library</artifactId>
            <version>1.3</version>
            <scope>test</scope>
        </dependency>
    复制代码

    Example

    下面是我们要测试的Controller

    复制代码
    package com.wadeshop.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class GreetingController {
    
        private static final String template = "Hello, %s!";
    
        @RequestMapping(value = "/greeting", method = RequestMethod.GET)
        @ResponseBody 
        public Greeting greeting(@RequestParam(value="name", required=false, defaultValue="World") String name) {
            return new Greeting(String.format(template, name));
        }
    }
    复制代码

    Greeting 类 如下

    复制代码
    public class Greeting {
        
        private final String content;
        
        public String getContent() {
            return content;
        }
     
        public Greeting(String content) {
            this.content = content;
        }
        
    }
    复制代码

    ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4311205.html 

    接下来就是创建Spring MVC 测试类了

    复制代码
    package com.wadeshop.controller;
    
    import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.given;
    import static org.hamcrest.Matchers.equalTo;
    
    import org.junit.Before;
    import org.junit.Test;
    
    import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc;
    
    public class GreetingControllerTest {
    
        @Before
        public void configured() {
            RestAssuredMockMvc.standaloneSetup(new GreetingController());
        }
    
        @Test
        public void test1() {
            given().
                   param("name", "Johan").
             when().
                   get("/greeting").
             then().
                   statusCode(200).
                   body("content", equalTo("Hello, Johan!"));
        }
        
        @Test
        public void test2() {
            given().
                   param("name", "").
             when().
                   get("/greeting").
             then().
                   statusCode(200).
                   body("content", equalTo("Hello, World!"));
        }
    
    }
    复制代码

    单元测试过程无非就这些步骤:

    1. 准备测试环境, 上面的例子就是使用 standalone setup 初始化MockMvc, 传入被测Controller

    2. 传入参数构造请求并且调用

    3. 验证结果

    执行结果如下

    是不是很简单?

    这种方式其实就是纯粹的单元测试,如果想模拟真实的Spring MVC, 走Spring MVC完整流程,比如Dispatcher servlet, 类型转换,数据绑定等等, 则需要用MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); 我在以后的文章中会介绍到。

    参考

    https://code.google.com/p/rest-assured/wiki/Usage#Spring_Mock_Mvc_Module

    ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4311205.html 

  • 相关阅读:
    [ZJOI2008]树的统计 树链剖分
    CF915E 动态开线段树
    Poj 2114 Boatherds(点分治)
    Poj 2599 Godfather(树的重心)
    Bzoj 2152: 聪聪可可(点分治)
    Cogs 1714. [POJ1741][男人八题]树上的点对(点分治)
    Cogs 329. K- 联赛(最大流)
    Cogs 731. [网络流24题] 最长递增子序列(最大流)
    Bzoj 2282: [Sdoi2011]消防(二分答案)
    Cogs 732. [网络流24题] 试题库(二分图)
  • 原文地址:https://www.cnblogs.com/softidea/p/4315502.html
Copyright © 2020-2023  润新知