• Spring Boot单元测试


    什么是单元测试

    是指对软件中的最小可测试单元进行检查和验证的过程。

    单元测试的好处

    • 可以非常简单、直观、快速的测试某一个功能是否正确
    • 使用单元测试可以帮我们在打包的时候,发现一些问题,因为在打包之前,所有的单元测试必须通过,否则不能打包成功。
    • 使用单元测试,在测试功能的时候,可以不污染连接数据库,也可以不对数据库进行任何改变的情况下,测试功能。

    单元测试的实现

    准备工作:确认项目中已经内置了测试框架。(高版本的spring boot已经内置)
    在这里插入图片描述

    1.先生成单元测试的类
    在这里插入图片描述

    在这里插入图片描述
    2. 配置单元测试的类添加@SpringBootTest注解,添加单元测试的业务代码

    @SpringBootTest//表示当前单元测试运行在spring boot 环境中
    class UserMapperTest {
    
        
        @Autowired //科学版的idea此行代码会报错
        private UserMapper userMapper;
        
        
        @Test
        void getUserById() {
           UserInfo userInfo= userMapper.getUserById(1);
            System.out.println(userInfo);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    断言

    在这里插入图片描述

    @SpringBootTest//表示当前单元测试运行在spring boot 环境中
    class UserMapperTest {
        @Autowired //科学版的idea此行代码会报错
        private UserMapper userMapper;
        @Test
        void getUserById() {
           UserInfo userInfo= userMapper.getUserById(1);
            //System.out.println(userInfo);
            Assertions.assertNotNull(userInfo);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这里是引用

    @SpringBootTest//表示当前单元测试运行在spring boot 环境中
    class UserMapperTest {
        @Autowired //科学版的idea此行代码会报错
        private UserMapper userMapper;
        @Test
        void getUserById() {
           UserInfo userInfo= userMapper.getUserById(1);
            //System.out.println(userInfo);
            Assertions.assertNull(userInfo);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这里是引用

    修改操作

    1. interface 添加修改方法的声明
     //修改方法【根据id修改名称】
        public int update(@Param("id") Integer id,@Param("username") String username);
    
    • 1
    • 2
    1. 在xml中添加接口的实现标签和具体的SQL
    <update id="update">
            update userinfo set username=#{username} where id=#{id}
     </update>
    
    
    • 1
    • 2
    • 3
    • 4

    测试:

        @Test
        @Transactional //在单元测试中添加此注解,表示在方法执行完之后回滚事务
        void update() {
            int result=userMapper.update(2,"zhangsan");
            Assertions.assertEquals(1,result);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    删除操作

    1. 在mapper(interface)里面添加删除代码的声明
     public int del (@Param("id") Integer id);
    
    • 1
    1. 在xml中添加标签和删除的SQL编写
    <delete  id="del">
            delete from userinfo where id=#{id}
     </delete>
    
    
    • 1
    • 2
    • 3
    • 4

    测试:

       @Test
        @Transactional
        void del() {
            int result=userMapper.del(2);
            System.out.println("受影响的行数"+result);
            Assertions.assertEquals(1,result);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    添加数据

    返回受影响的行数

    1. 在interface中添加声明
    //添加用户,返回受影响行数
        public int add(UserInfo userInfo);
    
    • 1
    • 2

    2.在xml中添加标签和添加的SQL编写

           <insert id="add">
            insert into userinfo (username,password,photo) values(#{username},#{password},#{photo});
    
        </insert>
    
    • 1
    • 2
    • 3
    • 4
       @Test
        void add() {
            UserInfo userInfo=new UserInfo();
            userInfo.setUsername("王五");
            userInfo.setPassword("123");
            userInfo.setPhoto("default.png");
            int result=userMapper.add(userInfo);
            System.out.println("添加的结果:"+result);
            Assertions.assertEquals(1,result);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    返回自增id

    1. 添加方法声明
    //添加用户,返回受影响的行数和自增的id
        public int addGetId(UserInfo userInfo);
    
    
    • 1
    • 2
    • 3
    1. 在xml中添加标签和添加的SQL编写
    <insert id="addGetId" useGeneratedKeys="true" keyProperty="id">
            insert into userinfo (username,password,photo) values(#{username},#{password},#{photo});
        </insert>
    
    • 1
    • 2
    • 3

    测试:

        @Test
        @Transactional
        void addGetId() {
            UserInfo userInfo=new UserInfo();
            userInfo.setUsername("六六六");
            userInfo.setPassword("123");
            userInfo.setPhoto("default.png");
            System.out.println("添加之前 user id: "+userInfo.getId());
            int result=userMapper.addGetId(userInfo);
            System.out.println("受影响的行数:"+result);
            System.out.println("添加之后 user id:"+userInfo.getId());
            Assertions.assertEquals(1,result);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    Access实现进度条功能
    2022年最新安徽建筑安全员考试题库及答案
    基于LSTM的诗词生成
    dreamweaver作业静态HTML网页设计 大学美食菜谱网页制作教程(web前端网页制作课作业)
    【Vue.js】使用Element搭建首页导航&左侧菜单
    【Spring】三级缓存
    插入排序(超详细)
    pytorch从0开始安装
    [附源码]Python计算机毕业设计DjangoON-FIT
    mac 下载使用sshpass+命令起别名
  • 原文地址:https://blog.csdn.net/m0_62824239/article/details/126133373