不写单元测试的项目不是好项目,不写单元测试的程序猿不是好测试,下面我们来看看SpringBoot怎么整合测试,这里只讲controller的测试,其他层的测试很简单,这里就略过:
1.引入测试依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2.controller:
@Controller
public class HostMtController {
@ResponseBody
@RequestMapping("/returnSelf")
public String returnSelf(String str) {
return str;
}
@ResponseBody
@RequestMapping("/getstr")
public String getString() {
return "Str";
}
}
3.在 src/test/java/ 下创建测试类HostMtControllerTest(这里要注意测试类的名称为待测试类的名称+Test)
@RunWith(SpringRunner.class)
// 指定启动类
@SpringBootTest(classes = { HostMtApp.class })
@AutoConfigureMockMvc
/*
* 使 用@SpringBootTest()与@AutoConfigureMockMvc结合,
*
* @SpringBootTest使用@SpringBootTest加载测试的spring上下文环境,
*
* @AutoConfigureMockMvc自动配置MockMvc这个类
*/
public class HostMtControllerTest {
// 模拟MVC对象,通过MockMvcBuilders.webAppContextSetup(this.wac).build()初始化。
@Autowired
private MockMvc mvc;
// get 请求
@Test
public void testHome() throws Exception {
// 请求是否成功
mvc.perform(MockMvcRequestBuilders.get("/getstr")).andExpect(MockMvcResultMatchers.status().isOk());
// 返回是否符合预期
mvc.perform(MockMvcRequestBuilders.get("/getstr")).andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("Str"));
}
// post
@Test
public void testShow() throws Exception {
// 请求是否成功
mvc.perform(MockMvcRequestBuilders.get("/returnSelf").param("str", "400"))
.andExpect(MockMvcResultMatchers.status().isOk());
// 返回是否符合预期
mvc.perform(MockMvcRequestBuilders.get("/returnSelf").param("str", "400"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("400"));
}
}
然后通过junit跑起来就OK了 !