使用ideal构建springboot项目,pom.xml(部分)如下:
<?xmlversion="1.0"encoding="UTF-8"?> <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> <relativePath/><!--lookupparentfromrepository--> </parent> <groupId>com.test</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>DemoprojectforSpringBoot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency><!--加入下面的引入,可以使用junit5的版本来测试;如果想用junit4的测试,把exclusioins去除--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project> |
建立一个controller
packagecom.test.demo.controller; importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.stereotype.Controller; importorg.springframework.web.bind.annotation.*; @Controller @RequestMapping("/index") publicclassIndexController{ privatestaticfinalLoggerLOG=LoggerFactory.getLogger(IndexController.class); @RequestMapping(value="/getData") @ResponseBody publicStringgetData(@RequestParam(value="searchPhrase",required=false)StringsearchPhrase){ Stringstatus="{\"status\":\"200\",\"searchPhrase\":\""+searchPhrase+"\"}"; returnstatus; } } |
建立一个测试类:
packagecom.test.demo; importcom.test.demo.controller.IndexController; importorg.junit.jupiter.api.*;//注意这里,这是junit5引入的;junit4引入的是org.junit.Test这样类似的包 importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.boot.test.context.SpringBootTest; importorg.springframework.http.MediaType; importorg.springframework.test.web.servlet.MockMvc; importorg.springframework.test.web.servlet.MvcResult; importorg.springframework.test.web.servlet.RequestBuilder; importorg.springframework.test.web.servlet.request.MockMvcRequestBuilders; importorg.springframework.test.web.servlet.result.MockMvcResultHandlers; importorg.springframework.test.web.servlet.result.MockMvcResultMatchers; importorg.springframework.test.web.servlet.setup.MockMvcBuilders; importorg.springframework.web.context.WebApplicationContext; //这里只写SpringBootTest这个注解;如果是junit4的话,就要加上@RunWith(SpringRunner.class) @SpringBootTest classDemoApplicationTests{ privatestaticfinalLoggerLOG=LoggerFactory.getLogger(DemoApplicationTests.class); privateMockMvcmockMvc; @Autowired privateWebApplicationContextwebApplicationContext; @Test voidcontextLoads(){ } @BeforeAll publicstaticvoidbeforeAll(){ LOG.info("beforeAll"); } @BeforeEach publicvoidbeforeEach(){ LOG.info("beforeEach");//mockMvc=MockMvcBuilders.standaloneSetup(newIndexController()).build(); mockMvc=MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } @AfterEach publicvoidafterEach(){ LOG.info("afterEach"); } @AfterAll publicstaticvoidafterAll(){ LOG.info("afterAll"); } @Test publicvoidtestTwo()throwsException{ RequestBuilderrequest=MockMvcRequestBuilders.get("/index/getData") .param("searchPhrase","ABC")//传参 .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_JSON);//请求类型JSON MvcResultmvcResult=mockMvc.perform(request) .andExpect(MockMvcResultMatchers.status().isOk())//期望的结果状态200 .andDo(MockMvcResultHandlers.print())//添加ResultHandler结果处理器,比如调试时打印结果(print方法)到控制台 .andReturn();//返回验证成功后的MvcResult;用于自定义验证/下一步的异步处理; intstatus=mvcResult.getResponse().getStatus();//得到返回代码 Stringcontent=mvcResult.getResponse().getContentAsString();//得到返回结果 LOG.info("status:"+status+",content:"+content); } } |
最后进行测试:
进入自己的目录,这里我是通过命令运行的,也可以通过其他方式运行(如ide的环境)
cdxxx/Demo>mvntest
测试结果如下:
2020-04-1113:04:49.920[main]INFOcom.test.demo.DemoApplicationTests-beforeAll 2020-04-1113:04:55.239[main]com.test.demo.DemoApplicationTests:beforeEach MockHttpServletRequest: HTTPMethod=GET RequestURI=/index/getData Parameters={searchPhrase=[ABC]} Headers=[Content-Type:"application/json",Accept:"application/json"] Body=<nocharacterencodingset> SessionAttrs={} Handler: Type=com.test.demo.controller.IndexController Method=com.test.demo.controller.IndexController#getData(String) Async: Asyncstarted=false Asyncresult=null ResolvedException: Type=null ModelAndView: Viewname=null View=null Model=null FlashMap: Attributes=null MockHttpServletResponse: Status=200 Errormessage=null Headers=[Content-Type:"application/json",Content-Length:"42"] Contenttype=application/json Body={"status":"200","searchPhrase":"ABC"} ForwardedURL=null RedirectedURL=null Cookies=[] 2020-04-1113:04:55.395INFO13164---[main]com.test.demo.DemoApplicationTests:status:200,content:{"status":"200","searchPhrase":"ABC"} 2020-04-1113:04:56.002INFO13164---[main]com.test.demo.DemoApplicationTests:afterEach 2020-04-1113:04:56.009INFO13164---[main]com.test.demo.DemoApplicationTests:afterAll |
这里可以看到返回的结果status:200,content:{"status":"200","searchPhrase":"ABC"}
其中传入的参数是ABC
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理