通常而言,咱们写好一个模块后,会对其进行单元测试,再集成到现有的系统中。java
可是呢~针对Controller、Service、Dao三层来讲,咱们最常的是对Service和Dao进行单元测试。然而Controller的测试,不少人仍是启动Tomcat,使用Postman进行api测试,这样不只须要等待很长的编译部署时间,并且没法逐个Controller功能进行单独测试,所以特地总结Controller层的单元测试。顺便说下,Postman挺好用的,只是咱们仍然须要启动tomcat,有点浪费时间。spring
那么,咱们须要有一种不需启动tomcat就能够测试controller层的方法。数据库
接下来咱们细细讲来。api
controller所采用的是SpringMVC框架 。SpringMVC已经继承了单元测试的类tomcat
@RunWith(SpringJUnit4ClassRunner.class) // 此处调用Spring单元测试类 @WebAppConfiguration // 调用javaWEB的组件,好比自动注入ServletContext Bean等等 @ContextConfiguration(locations = { "classpath:context.xml", "classpath:mvccontext.xml" }) // 加载Spring配置文件 public class TestPayTypeController { @Autowired PayTypeController payTypeController;//测试的controller类 @Autowired ServletContext context; MockMvc mockMvc; @Before public void setup() { mockMvc = MockMvcBuilders.standaloneSetup(payTypeController).build(); } }
注意:服务器
@WebAppConfiguration若是不加的话,是无法调用WEB的一些特性的。常常会被遗忘掉。。。mvc
@ContextConfiguration中,须要把全部Spring的配置文件所有加载进来,由于有的项目中Spring 的xml配置是分拆的。 此处的xml是放在resources的根目录中。app
MockMvc是SpringMVC提供的Controller测试类框架
每次进行单元测试时,都是预先执行@Before中的setup方法,初始化PayTypeController单元测试环境。工具
ResultAction是用来模拟Browser发送FORM表单请求的。get()是请求的地址,accept()请求的内容 ;
@org.junit.Test // get请求 public void getListTest() throws Exception { // 发送请求 ResultActions resultActions = this.mockMvc .perform(MockMvcRequestBuilders.get("/paytype/list/all").accept(MediaType.APPLICATION_JSON)); MvcResult mvcResult = resultActions.andReturn(); String result = mvcResult.getResponse().getContentAsString(); System.out.println("客户端获的数据:" + result); }
在控制台打印以下,说明成功了!
ResultAction是用来模拟Browser发送FORM表单请求的。post()是请求的地址,accept()请求的内容 param()请求的键值对,若是有多个参数能够后缀调用多个param();
MvcResult是得到服务器的Response内容。
@org.junit.Test // post请求 public void addTest() throws Exception { // 发送请求 ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.post("/paytype/add") .accept(MediaType.APPLICATION_JSON).param("typename", "一年停").param("payfee","4444.0").param("payto", "post")); MvcResult mvcResult = resultActions.andReturn(); String result = mvcResult.getResponse().getContentAsString(); System.out.println("客户端获的数据:" + result); }
成功插入数据库;
通常经常使用的就get,post请求;至此,咱们不需启动tomcat就能测试controller层的method。
@RequestMapping(value = "/add", method = RequestMethod.POST) public ResultMessage add(PayTypeModel ptm) throws Exception { ResultMessage result = new ResultMessage(); payTypeService.add(ptm); result.setResult("Y"); result.setMessage("增长缴费类型成功"); return result; } @RequestMapping(value="/get",method=RequestMethod.GET) public PayTypeModel get(@RequestParam int typeno) throws Exception { return payTypeService.get(typeno); }
若有错误,欢迎留言指正!