标签:请求 Spring hello Boot private 单元测试 发送 andExpect public
同样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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。