Spring Boot Controller单元测试的编写
程序员文章站
2022-04-29 16:39:13
...
单元测试是开发者针对目标代码编写的一小段代码,目的是为了确保我们目标代码与预期行为是一致的。以下是对一个Spring Boot小项目的Controller,进行的单元测试的简单编写:
//Controller
@RestController
public class UserController {
@Resource
private UserRepository userRepository;
@PostMapping("/users")
public String save(User user){
userRepository.save(user);
return "SUCCESS";
}
@DeleteMapping("/users/{id}")
public String delete(@PathVariable(name = "id") Integer id){
userRepository.deleteById(id);
return "SUCCESS";
}
@GetMapping("/users/{id}")
public User findOne(@PathVariable(name = "id") Integer id){
return userRepository.findById(id).get();
}
@PutMapping("/users")
public User update(User user){
userRepository.save(user);
return userRepository.getOne(user.getId());
}
}
Controller层测试用例:
@RunWith(SpringRunner.class)
@SpringBootTest
//@ActiveProfiles("dev")加载特定配置文件
@AutoConfigureMockMvc
public class UserControllerTest {
@Autowired
private MockMvc mvc;
@Test
@Transactional//测试环境下将自动进行回滚操作
//@Rollback(false)
public void testInsert() throws Exception {
MockHttpServletRequestBuilder request = MockMvcRequestBuilders.post("/users");
request.param("name","laiminghai");
mvc.perform(request).
andExpect(MockMvcResultMatchers.status().isOk()).
andExpect(MockMvcResultMatchers.content().string("SUCCESS"));
}
@Test
@Transactional
//@Rollback(false)不回滚
public void testDelete() throws Exception{
MockHttpServletRequestBuilder request = MockMvcRequestBuilders.delete("/users/18");
mvc.perform(request).andExpect(MockMvcResultMatchers.status().isOk()).
andExpect(MockMvcResultMatchers.content().string("SUCCESS"));
}
@Test
public void testFindOne() throws Exception{
MockHttpServletRequestBuilder request = MockMvcRequestBuilders.get("/users/2");
mvc.perform(request).andExpect(MockMvcResultMatchers.status().isOk()).
andExpect(MockMvcResultMatchers.content().
string("{\"id\":2,\"name\":\"xiaoming2\"}"));
}
@Test
public void testUpdate() throws Exception{
MockHttpServletRequestBuilder request = MockMvcRequestBuilders.put("/users");
request.param("id","2");
request.param("name","xiaoming222");
mvc.perform(request).andExpect(MockMvcResultMatchers.status().isOk()).
andExpect(MockMvcResultMatchers.content().
string("{\"id\":2,\"name\":\"xiaoming222\"}"));
}
}
最后,针对接口的测试,这里推荐一个好用的插件:Chrome浏览器的Postman,有兴趣的可以去了解一下。
上一篇: php环境下利用session防止页面重复刷新的具体实现
下一篇: day 2 - 逻辑运算
推荐阅读
-
使用Spring Boot和OAuth构建安全的SPA
-
idea创建maven或spring boot的聚合体项目
-
Spring Boot打包成jar与war的区别
-
spring boot实现文件的上传和返回Json的结果
-
IDEA Spring Boot 自动化构建+部署的实现
-
Spring Boot 打包成的可执行 jar ,为什么不能被其他项目依赖?
-
spring-boot-2.0.3不一样系列之源码篇 - run方法(四)之prepareContext,绝对有值得你看的地方
-
使用Docker部署Spring Boot的方法示例
-
使用docker部署spring boot并接入skywalking的方法
-
spring boot的热部署 devtools和jreble