zoukankan      html  css  js  c++  java
  • 就是这么简单(续)!使用 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 

  • 相关阅读:
    姐姐的vue(1)
    LeetCode 64. Minimum Path Sum 20170515
    LeetCode 56. 56. Merge Intervals 20170508
    LeetCode 26. Remove Duplicates from Sorted Array
    LeetCode 24. Swap Nodes in Pairs 20170424
    LeetCode 19. Remove Nth Node From End of List 20170417
    LeetCode No.9 Palindrome Number 20170410
    LeetCode No.8. String to Integer (atoi) 2017/4/10(补上一周)
    LeetCode No.7 Reverse Integer 2017/3/27
    LeetCode No.4 Median of Two Sorted Arrays 20170319
  • 原文地址:https://www.cnblogs.com/softidea/p/4315502.html
Copyright © 2011-2022 走看看