• 【单元测试】SpirngBoot测试Controller,Service,Dao


    为什么要单元测试?

    如果不单元测试,不知道具体功能代码模块是否正确,只能通过PostMan或者启动项目Http请求去测试功能,而且不能具体测试某个代码块的功能(比如单独测试 FindUserByID 这个功能模块),有单元测试之后程序员可以自己测试自己写的代码功能是否正确。


    添加 Pom 文件

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-testartifactId>
    4. <scope>testscope>
    5. dependency>

    测试Service

     

     生成Service测试环境

    1. @SpringBootTest
    2. class FindUserByIdServiceImpTest {
    3. @Autowired
    4. private FindUserByIdService findUserByIdService;
    5. @Test
    6. void findUserById() {
    7. UserVO user = findUserByIdService.findUserById(130);
    8. System.out.println(user.getUsername()+user.getPhonenumber());
    9. System.out.println(user);
    10. }
    11. }

    测试代码

    @SpringBootTest:测试类所需注解

    @Test:测试方法所需注解

    1. @RunWith的作用
    2. @RunWith:就是一个运行器
    3. @RunWith(SpringRunner.class):指让类运行在Spring的测试环境,以便测试开始时自动创建Spring应用上下文
    4. @RunWith(JUnit4.class) 指用JUnit4测试工具来运行测试。
    5. @RunWith(SpringJUnit4ClassRunner.class):综合了注释2和注释3,让测试类运行于Spring测试环境,并使用JUnit4测试工具来运行测试。
    6. @RunWith(Suite.class):一套测试集合(suite指一套,使用RunWith测试套件)
    7. 在Idea环境中,如果不添加额外选项,默认使用JUnit4测试工具来进行测试。因此,@RunWith(SpringRunner.class)和@RunWith(SpringJUnit4ClassRunner.class)在idea环境下是等价的。

    测试结果 


    还有一种情况,测试对数据库的写的操作

    1. @SpringBootTest
    2. @RunWith(SpringRunner.class)
    3. class AddUserServiceImpTest {
    4. @Autowired
    5. private AddUserService addUserService;
    6. @Autowired
    7. private FindUserByIdService findUserByIdService;
    8. @Test
    9. @Transactional
    10. @Rollback
    11. void addUser(){
    12. User user = new User();
    13. user.setUsername("小白");
    14. user.setUserid(234);
    15. user.setPassword("414");
    16. user.setPhonenumber("19196511719");
    17. addUserService.addUser(user.getUserid(),user.getUsername(),user.getPhonenumber(),user.getPassword(),777);
    18. System.out.println("+++++++++++++++");
    19. UserVO userById = findUserByIdService.findUserById(234);
    20. System.out.println(userById);
    21. System.out.println("+++++++++++++++");
    22. }
    23. }

    测试模块不能真的添加数据到数据库,但需要测试加入数据,所以需要 @Transactional @Rollback 注解完成对sql事务和回滚的操作


    测试Controller

    1. @SpringBootTest
    2. class FindUserByIdControllerTest {
    3. @Autowired
    4. private MockMvc mockMvc;
    5. @Autowired
    6. private WebApplicationContext webApplicationContext;
    7. @Test
    8. void findUserById() {
    9. mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); //构建请求地址服务
    10. RequestBuilder request = get("http://localhost:8080/find?userid=150");
    11. try {
    12. String response = mockMvc.perform(request).andReturn().getResponse().getContentAsString();
    13. System.out.println(response);
    14. }catch (Exception e){
    15. e.printStackTrace();
    16. }
    17. }
    18. }

    需要通过 MockMvc 和 WebApplicationContext 去搭建一个请求地址服务

  • 相关阅读:
    yum仓库
    【图像分割】基于和声搜索算法实现图像多级阈值分割附matlab代码
    Docker使用
    英语学习:M开头
    拓展企业客户群:如何使用企业联系方式查询API帮助在社交媒体上寻找潜在客户
    java进程CPU飙升
    发布版本自动化记录版本功能方法
    java计算机毕业设计心理学网站源程序+mysql+系统+lw文档+远程调试
    Java面向对象学习笔记-2
    反向传播不香了?解读 Hinton 大佬的 Forward-Forward 算法
  • 原文地址:https://blog.csdn.net/m0_46628950/article/details/127135472