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


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

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

    接我前面一篇文章关于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 

  • 相关阅读:
    Core中间件——访问记录
    前段时间蛮火的哄老婆的小玩具
    PHP word PDF excel 文档互转 预览 (linux libreoffice)
    PHP Excel Word 文件转 HTML输出
    mysql skip-name-resolve 的解释
    使用fastcgi_finish_request提高页面响应速度
    PHP SplQueue 实现队列
    mysql in条件查询到底会不会用到索引
    安装 docker-compose 配置 lnmp
    使用docker 安装 LNMP
  • 原文地址:https://www.cnblogs.com/wade-xu/p/4311205.html
Copyright © 2020-2023  润新知