0


Spring Boot 单元测试(Controller测试与Service测试)

🎈博客主页:🌈我的主页🌈
🎈欢迎点赞 👍 收藏 🌟留言 📝 欢迎讨论!👏
🎈本文由 【泠青沼~】 原创,首发于 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());}

在这里插入图片描述



本文转载自: https://blog.csdn.net/m0_46635265/article/details/123860150
版权归原作者 泠青沼~ 所有, 如有侵权,请联系我们删除。

“Spring Boot 单元测试(Controller测试与Service测试)”的评论:

还没有评论