java 单机接口限流处理方案
271
2022-11-04
spring boot里面对WEB API的单元测试
如前一篇文章(《spring boot web api》)所述,spring boot项目里提供web api非常方便。而作为开发人员,自己写的api,首先要自己先测试一轮,通过才能给其他人调用。API就是用来调用的,所以沟通、测试显得特别重要。
程序员测试,当然是单元测试了。下面是一个完整的单元测试代码。待测试的API是POST访问方式的api,有两个:一个提交参数格式为json,一个为键值对。
import api.entity.Author;import api.entity.EnumSex;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.ObjectWriter;import org.junit.After;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.org.springframework.test.context.junit4.SpringRunner;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import org.springframework.test.web.servlet.result.MockMvcResultMatchers;import org.springframework.test.web.servlet.setup.MockMvcBuilders;import org.springframework.web.context.WebApplicationContext;import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;@RunWith(SpringRunner.class)@SpringBootTestpublic class MyTest { @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setUp() { mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); } @After public void after() throws Exception { mockMvc = null; } @Test public void testJson() throws Exception {//测试提交参数为JSON格式 Author req = new Author();//Author是自定义的类 req.setName("zhang3"); req.setDesc("foolish"); req.setSex(EnumSex.Male); ObjectMapper mapper = new ObjectMapper(); ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter(); java.lang.String requestJson = ow.writeValueAsString(req); mockMvc.perform(MockMvcRequestBuilders.post("/api/authors/json/1?t=108") .contentType(MediaType.APPLICATION_JSON).content(requestJson)) .andDo(print()) .andExpect(MockMvcResultMatchers.status().isOk()) .andReturn().getResponse().getContentAsString(); System.out.println("ok!!!"); } @Test public void testKv() throws Exception {//测试提交参数为键值对格式 Author req = new Author(); req.setName("li4"); req.setDesc("foolish"); req.setSex(EnumSex.Male); ObjectMapper mapper = new ObjectMapper(); ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter(); java.lang.String requestJson = ow.writeValueAsString(req); mockMvc.perform(MockMvcRequestBuilders.post("/api/authors/kv/1?t=108") .contentType(MediaType.APPLICATION_FORM_URLENCODED).content(requestJson)) .andDo(print()) .andExpect(MockMvcResultMatchers.status().isOk()) .andReturn().getResponse().getContentAsString(); System.out.println("ok!!!"); }}
附API:
@RestController@RequestMapping(value="/api")public class ApiController { //提交的参数为json //主要在于注解@RequestBody @RequestMapping(value = "/authors/json/{id}", method = RequestMethod.POST) public String test(@PathVariable int id, @RequestParam("t") int type,@RequestBody Author auth){ return String.format("id:%1$d,type:%2$d,name:%3$s;params type:json",id,type,auth.getName()); } //提交的参数为键值对 @RequestMapping(value = "/authors/kv/{id}", method = RequestMethod.POST) public String test2(@PathVariable int id, @RequestParam("t") int type,Author auth){ return String.format("id:%1$d,type:%2$d,name:%3$s;params type:key-value",id,type,auth.getName()); } }
注意单元测试的类及方法都应该是public的。
想运行单元测试,则右击具体方法,run即可。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~