重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇文章为大家展示了Spring MVC应用如何进行测试,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
创新互联建站主要从事网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务岳塘,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108Spring的依赖注入使得我们的代码非常容易进行单元测试——@Controller
, @Service
,@Entity
等注解标注的类基本都是POJO(plain old Java object),也就是说很少依赖于Spring容器本身的API。我们可以非常容易地使用JUnit或TestNG编写测试代码。另一方面,对于三层架构的Spring Web应用(Controller, Service, DAO),使用Mock活Stub方法也能够更好的来测试我们的代码逻辑。例如Service层代码的单元测试中,依赖的DAO(或Repository)对象都是根据应用测试需求Mock出来的,而不需要真正去访问数据库。
Spring Web测试
在对Spring Web应用中的@Controller
代码进行单元测试的过程中,一般的方法是创建@Controller
对象,同时将它依赖的一些Mock对象——例如MockHttpServletRequest, MockHttpServletResponse(都由spring-test模块提供,无需自己编写)作为@Controller方法的参数。但是对于处理Web请求的@Controller代码来说,仅仅测试Handler方法里的代码是远远不够的,对于一个处理HTTP请求的@Controller`,我们还需要测试:
@RequestMapping
路由是否正确@PathVariable
等@InitBinder
, @ModelAttribute
, @ExceptionHandler
等注解的方法或属性计算过程上述过程贯穿于HTTP请求处理的生命周期中,所以对于Spring Web应用中@Controller
代码单元测试的概念,应该做一些扩充——不仅仅局限于代码本身,也要结合MVC框架中的各个处理过程。
本文接下来的内容代码,都以Spring Boot为例,首先假设我们通过Spring Boot创建了一个最简单的Web Mvc应用——包含了一个最简单的Conroller,处理/users/{id}
对应的HTTP请求,返回值是id={id}
(通过String.format()
方法),那么可以为它创建如下测试代码:
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = SpringMvcTestDemoApplication.class) @WebAppConfiguration public class SpringMvcTestDemoApplicationTests { private MockMvc mockMvc; @Before public void init() { this.mockMvc = MockMvcBuilders.standaloneSetup(new UserController()).build(); } @Test public void getUserById() throws Exception { long id = 1; this.mockMvc.perform(get("/users/" + id)) .andExpect(status().isOk()) .andExpect(content().string("id=" + id)); } }