🎈博客主页:🌈我的主页🌈
🎈欢迎点赞 👍 收藏 🌟留言 📝 欢迎讨论!👏
🎈本文由 【泠青沼~】 原创,首发于 CSDN🚩🚩🚩
🎈由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!🌠个人主页
目录
🌟 一、单元测试依赖解析

🌟 二、单元测试注解分析

@SpringBootTest相当于springMvc中单元测试中的applicationContext,用于配置上下文环境

注解内部本身就十分重要的属性:
webEnvironment属性: 指定Web的应用环境
- MOCK 指定的默认取值 提供一个模拟的Servlet环境(内置Servlet环境并没有启动) 并基于MOCKMvc来进行测试
- RANDOM_PORT 提供随机的端口 提供一个真正的Servlet
- DEFINE_PORT 提供默认端口 提供一个真正的Servlet
- NONE 不提供Web环境 (一般不用配置,SpringBoot自动配置好的) classes属性:指定应用的启动类 (不需要配置,一般都是SpringBoot自动去寻找)
@Transactional注解:
应用于数据库应用中,涉及到数据库的操作,操作完成后会自动进行一个回滚,避免脏数据,如果使用RANDOM_PORT和DEFINE_PORT的Web应用环境,Http客户端服务器将在不同的线程中运行,分离事务,事务不会回滚
🌟 三、Controller测试
🌟🌟 3.1、测试实体类
publicclassUser{privateLong id;privateString username;
get和set方法省略
}
🌟🌟 3.2、测试Controller类
@RestControllerpublicclassUserController{@GetMapping("/hello/{id}")publicUsergetUserByid(@PathVariableLong id){User user =newUser();
user.setUsername("dong");
user.setId(id);return user;}}
🌟🌟 3.2、开启Controller单元测试

进入到测试类中,注入web应用上下文webApplicationContext与mockMvc
@AutowiredWebApplicationContext webApplicationContext;MockMvc mockMvc;
初始化mockMvc(两种方式)
//初始化mockmvc@BeforeEachvoidsetUp(){//自动去查找Controller
mockMvc =MockMvcBuilders.webAppContextSetup(webApplicationContext).build();}
//初始化mockmvc@BeforeEachvoidsetUp(){//自己指定要测试的Controller
mockMvc =MockMvcBuilders.standaloneSetup(newUserController()).build();}
测试Controller
@TestvoidcontextLoads()throwsException{
mockMvc.perform(MockMvcRequestBuilders//访问的URL和参数.get("/hello/99")//允许的编码格式.accept(MediaType.APPLICATION_JSON_UTF8))//期望返回的状态码.andExpect(MockMvcResultMatchers.status().isOk())//编辑期望收到的JSON字符串.andExpect(MockMvcResultMatchers.content().string("{\"id\":99,\"username\":\"dong\"}"))//输出请求和响应结果.andDo(MockMvcResultHandlers.print());}


🌟 四、Service测试
🌟🌟 4.1、测试UserDao类
@RepositorypublicclassUserDao{publicUsergetUserById(long id){User user =newUser();
user.setId(id);
user.setUsername("dong");return user;}}
🌟🌟 4.2、测试Service类
@ServicepublicclassUserService{@AutowiredUserDao userDao;publicUsergetUserById(long id){return userDao.getUserById(id);}}
🌟🌟 4.3、开启Service单元测试
//替换UserDao,不使用数据的Dao,使用测试的Dao@MockBeanUserDao userDao;@AutowiredUserService userService;@TestvoidTest1(){User user =newUser();
user.setUsername("123");
user.setId(99L);//当调用userDao的getUserById方法传入参数99L,就返回一个对象Mockito.when(userDao.getUserById(99L)).thenReturn(user);User u = userService.getUserById(99L);//测试获得的对象与预期的对象是否一致Assertions.assertEquals(99L,u.getId());Assertions.assertEquals("123",u.getUsername());}

版权归原作者 泠青沼~ 所有, 如有侵权,请联系我们删除。