Spring MVC的测试
本节主要是进行一些和Spring MVC相关的测试,控制器的测试
测试需要添加的依赖不必说了,已经在第一部分添加完毕,spring-test和junit两个依赖包
1.演示服务DemoService
package com.just.springmvc4.service; import org.springframework.stereotype.Service; @Service public class DemoService { public String saySomething(){ return "hello"; } }
2.普通控制器
返回一个页面
package com.just.springmvc4.controller; import com.just.springmvc4.service.DemoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class NormalController { @Autowired private DemoService demoService; @RequestMapping("/normal") public String testPage(Model model){ model.addAttribute("msg",demoService.saySomething()); return "page"; } }
page.jsp文件自己编写
3.RestController控制器
返回字符串
package com.just.springmvc4.controller; import com.just.springmvc4.service.DemoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyRestController { @Autowired private DemoService demoService; @RequestMapping(value = "/testRest",produces = "text/plain;charset=utf-8") public String testRest(){ return demoService.saySomething(); } }
4.测试用例
在src/test/java下新建一个测试类
package com.just.springmvc4; import com.just.springmvc4.config.MyMvcConfig; import com.just.springmvc4.service.DemoService; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpSession; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; 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.forwardedUrl; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {MyMvcConfig.class}) @WebAppConfiguration("src/main/resources") public class TestControllerIntegration { /** * 模拟MVC对象 */ private MockMvc mockMvc; @Autowired private DemoService demoService; @Autowired private WebApplicationContext wac; @Autowired MockHttpSession session; @Autowired MockHttpServletRequest request; @Before public void setUp(){ this.mockMvc= MockMvcBuilders.webAppContextSetup(this.wac).build(); } @Test public void testNormalController() throws Exception { mockMvc.perform(get("/normal")) .andExpect(status().isOk()) .andExpect(view().name("page")) .andExpect(forwardedUrl("/WEB-INF/classes/views/page.jsp")) .andExpect(model().attribute("msg",demoService.saySomething())); } @Test public void testRestController() throws Exception { mockMvc.perform(get("/testRest")) .andExpect(status().isOk()) .andExpect(content().contentType("text/plain;charset=utf-8")) .andExpect(content().string(demoService.saySomething())); } }
@WebAppConfiguration注解在类上,用来声明加载的ApplicationContext是一个WebApplicationContext,它的属性指定的是资源的位置,默认为webapp,这里修改为本项目真正的资源目录