Spring Boot单元测试
作者:互联网
同样Spring Boot已经给我们提供好了现成的测试模块,我们只要会用就行了,然后这个是官方的例子:传送门
最简单的直接自动注入
这个就是需要一个@SpringBootTest注解来告诉框架,这个是一个测试模块,然后将自己需要测试的类注入进来,调用方法就行了,个人认为,这种比较适合dao层或者是service层。
@SpringBootTest
public class DemoTest1 {
@Autowired
private HelloController controller;
@Test
public void test() {
System.out.println(controller);
}
}
模拟发送请求的方式
Spring Boot提供了模拟发送请求的方式来测试我们写好的方法是不是能够满足相应的功能。
/**
* 模拟发送http请求,获取执行的结果
*/
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class DemoTest2 {
@LocalServerPort
private int port;
@Autowired
private TestRestTemplate restTemplate;
@Test
public void test() {
String forObject = this.restTemplate.getForObject("http://127.0.0.1:" + port + "/welcome", String.class);
System.out.println(forObject);
}
}
在这个里面主要需要依赖的就是TestRestTemplate这个类,通过它来发送各种请求,获取到执行的结果。
它可以调用不同的方法来发送不同类型的请求。
只测试WEB层
Spring Boot提供了一个只测试web层的方法,这个不会调用其他层的方法,如果方法本身需要进行调用了,需要我们自己给Controller方法进行传参。
@WebMvcTest
public class DemoTest3 {
@Autowired
private MockMvc mockMvc;
/**
* 方法没有参数
* @throws Exception
*/
@Test
public void test() throws Exception {
ResultActions hello_word = this.mockMvc.perform(get("/hello"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string(containsString("Hello word")));
}
@MockBean
private WelcomeService welcomeService;
/**
* 方法有参数
* @throws Exception
*/
@Test
public void test2() throws Exception {
//controller层需要welcomeService的方法greeting()提供返回值,使用这种方式来设置
when(welcomeService.greeting()).thenReturn("hello, mock");
ResultActions hello_word = this.mockMvc.perform(get("/welcome"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string(containsString("hello, mock")));
}
}
在这个里面,核心是MockMvc这个类,通过调用perform()来发送请求,后面的andDo()是设置发送请求之后执行什么动作、andExpect()则是设置希望请求返回的结果是什么。
perform()的参数是通过MockMvcRequestBuilders这个类的静态方法构建出来的请求,支持设置参数、请求类型等。
标签:请求,Spring,hello,Boot,private,单元测试,发送,andExpect,public 来源: https://blog.csdn.net/weixin_45980031/article/details/113428859