本文共 3011 字,大约阅读时间需要 10 分钟。
接我前面一篇文章关于RestAssured测试Restful web service的, RestAssured还有一个功能, 使用RestAssuredMockMvc 单元测试你的Spring MVC Controllers, 这个MockMvc 是建立在Spring MockMvc基础上的, 其目的是让我们用起来更便捷。
com.jayway.restassured spring-mock-mvc 2.4.0 test junit junit 4.11 test org.hamcrest hamcrest-core 1.3 test org.hamcrest hamcrest-library 1.3 test
下面是我们要测试的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;@Controllerpublic 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; } }
##转载注明出处:
接下来就是创建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(); 我在以后的文章中会介绍到。
##转载注明出处: