1.安装插件JUnitGenerator V2.0
File---->Settings---->Browse Repositories
2.安装好后把JUnit和JUnitGenerator V2.0一起勾上
3.配置插件
把package上test.前缀去掉
配置测试类生成的地址
${SOURCEPATH}/../../test/java/${PACKAGE}/${FILENAME}
4.对着要生成的类
package com.sid.service.impl; import com.sid.service.UserService; import org.junit.After; import org.junit.Assert; 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.test.context.junit4.SpringRunner; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; /** * @Description: Service层单元测试 启动了服务 * @Param: * @return: * @Author: Sid * @Date: 2018-10-24 13:53 * @since: 1.0 */ @RunWith(SpringRunner.class) @SpringBootTest public class UserServiceImplTest { /** * @Description: 直接测试service 用IOC注入进来 这样run的时候会先启动springboot项目 * @Param: * @return: * @Author: Sid * @Date: 2018-10-24 13:42 * @since: 1.0 */ @Autowired UserService userService; @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void set() { userService.set("sid:test:string:key:","lalala"); String value = userService.get("sid:test:string:key:"); Assert.assertEquals("lalala",value); //可以只使用 assertThat 一个断言语句,结合 Hamcrest 提供的匹配符,就可以表达全部的测试思想 //引入import static org.hamcrest.CoreMatchers.*; Assert.assertThat(value,is("lalala")); } }
有两种方法,1可以跟上面一样用@Autowired把Controller注入进来然后调用Controller的方法。参照上方,这里不介绍。
2.用MockMvc模拟完整的HTTP请求
package com.sid.controller; 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.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultHandlers; 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.hamcrest.CoreMatchers.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; /** * @Description: Controller层单元测试 注入Spring 上下文的环境到 MockMvc 中 测试时会启动项目 * @Param: * @return: * @Author: Sid * @Date: 2018-10-24 13:45 * @since: 1.0 */ @RunWith(SpringRunner.class) @SpringBootTest public class UserControllerTest { /** * @Description: 使用MockMvc 模拟HTTP请求 来测试controller * MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用, * 这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。 * * // 模拟MVC对象,通过MockMvcBuilders.webAppContextSetup(this.wac).build()初始化。 * @Param: * @return: * @Author: Sid * @Date: 2018-10-24 13:43 * @since: 1.0 */ private MockMvc mvc; @Autowired private WebApplicationContext wac; // 注入WebApplicationContext /** * @Description: 直接注入userController 然后调用userController的方法来测试 * @Param: * @return: * @Author: Sid * @Date: 2018-10-24 13:44 * @since: 1.0 */ // @Autowired // private UserController userController; @Before public void setUp() throws Exception { //使用 WebApplicationContext 构建 MockMvc this.mvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); } @After public void tearDown() throws Exception { } @Test public void addUser() throws Exception { MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/user/add") .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE) //form表单格式传参 .param("id", "4") .param("name", "junit test") .param("password", "111") .param("mobilePhone", "18523980000") .characterEncoding("utf-8") .accept(MediaType.APPLICATION_JSON_UTF8_VALUE); ResultActions result = mvc.perform(requestBuilder); MvcResult mvcResult = result.andExpect(MockMvcResultMatchers.status().isOk()) .andDo(MockMvcResultHandlers.print()) .andReturn();// 返回执行请求的结果 System.out.println("response------------------:"+mvcResult.getResponse().getContentAsString()); } @Test public void deleteUser() throws Exception { MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/user/delete") .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE) //form表单格式传参 .param("mobilePhone", "18523980000") .characterEncoding("utf-8") .accept(MediaType.APPLICATION_JSON_UTF8_VALUE); ResultActions result = mvc.perform(requestBuilder); MvcResult mvcResult = result.andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.jsonPath("$").value(1)) .andDo(MockMvcResultHandlers.print()) .andReturn();// 返回执行请求的结果 System.out.println("response------------------:"+mvcResult.getResponse().getContentAsString()); } @Test public void updateUser() throws Exception { MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/user/update") .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE) //form表单格式传参 .param("id", "1") .param("name", "李沂桀") .param("mobilePhone", "185") .param("password", "5") .characterEncoding("utf-8") .accept(MediaType.APPLICATION_JSON_UTF8_VALUE); ResultActions result = mvc.perform(requestBuilder); MvcResult mvcResult = result.andExpect(MockMvcResultMatchers.status().isOk()) .andDo(MockMvcResultHandlers.print()) .andReturn();// 返回执行请求的结果 System.out.println("response------------------:"+mvcResult.getResponse().getContentAsString()); } @Test public void selectAll() throws Exception { MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/user/selectAll") .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE) //form表单格式传参 .param("pageNum", "1") .param("pageSize", "5") .characterEncoding("utf-8") .accept(MediaType.APPLICATION_JSON_UTF8_VALUE); ResultActions result = mvc.perform(requestBuilder); MvcResult mvcResult = result.andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(jsonPath("list").exists()) .andExpect(jsonPath("$.list", notNullValue())) .andExpect(jsonPath("$.list[0].id", is(1))) .andDo(MockMvcResultHandlers.print()) .andReturn();// 返回执行请求的结果 System.out.println("response------------------:"+mvcResult.getResponse().getContentAsString()); } @Test public void getUserByMobilePhone() throws Exception { MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/user/getUserByMobilePhone") .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE) //form表单格式传参 .param("mobilePhone", "18523980000") .characterEncoding("utf-8") .accept(MediaType.APPLICATION_JSON_UTF8_VALUE); ResultActions result = mvc.perform(requestBuilder); MvcResult mvcResult = result.andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(jsonPath("$", notNullValue())) .andExpect(jsonPath("$.name", is("junit test"))) .andDo(MockMvcResultHandlers.print()) .andReturn();// 返回执行请求的结果 System.out.println("response------------------:"+mvcResult.getResponse().getContentAsString()); } @Test public void set() { } @Test public void get() { } }