当前位置: 首页 > article >正文

Springboot项目编写测试单元步骤

以mapper为例编写测试单元

1.引入junit测试依赖及其他相关依赖

springboot集成了junit,引入springboot的test依赖即可

用Spring Initializr创建springboot项目时,默认会自动添加junit的依赖。如果不使用Spring Initializr,可以手动添加依赖

<!--     spring boot 集成junit   -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${spring-boot.version}</version>
            <scope>test</scope>
            <exclusions>
               <exclusion>
                   <groupId>org.junit.vintage</groupId>
                   <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>

        </dependency>
<!--Mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
<!--  mybatis-puls的依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-context</artifactId>
        </dependency>

        <!-- 排除 Spring Boot 依赖的日志包冲突 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- Spring Boot 集成 log4j2 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

junit-vintage-engine是使用老版本junit所需的依赖,不需要,使用<exclusions>排除,当然留着也行。

在maven中查看引入的依赖如下:

 2.添加配置文件

在test文件夹下新建resources(如果没有),并右键添加到Resources Root

在resources文件夹下创建日志配置文件和bootstrap.yml文件,分别如下

1)- log4j2配置文件

2)-bootstrap.yml

#注意datasource的参数改成工程实际参数
spring:
  application:
    name: content-service
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/xc_content?serverTimezone=UTC&userUnicode=true&useSSL=false&
    username: root
    password: myb
# 日志文件配置路径
logging:
  config: classpath:log4j2-dev.xml

 3.在测试文件中新建启动文件

在test/java文件夹下新建和src文件一样的目录,并在根目录下新建启动文件

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author may
 * @version 1.0
 * @description 测试类启动文件
 * @date 2025/2/4  22:37
 */
@SpringBootApplication
public class ContentApplication {
    public static void main(String[] args) {
        SpringApplication.run(ContentApplication.class, args);
    }
}

4.在src的目录下添加分页查询的配置文件

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * <P>
 *        Mybatis-Plus 配置
 *        这个文件有两个功能:1.配置包扫描文件,即@MapperScan注解;2.bean分页插件
 * </p>
 */
@Configuration
//扫描mapper,生成mapper接口的代理对象,放到spring容器
@MapperScan("com.xuecheng.content.mapper")
public class MybatisPlusConfig {
   /**
    * 定义分页拦截器
    */
   //Bean需要和@Configuration配合使用才能生效
   @Bean
   public MybatisPlusInterceptor mybatisPlusInterceptor() {
      //重新定义一个MybatisPlus拦截器
      MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
      //把分页拦截器添加进去,并指定按照mysql分页 语句的语法来拼装分页
      interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
      return interceptor;
   }
}

 5.编写测试类

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xuecheng.base.model.PageParams;
import com.xuecheng.base.model.PageResult;
import com.xuecheng.content.mapper.CourseBaseMapper;
import com.xuecheng.content.model.dto.QueryCourseParamsDto;
import com.xuecheng.content.model.po.CourseBase;
import org.apache.commons.lang.StringUtils;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;
/**
 * @author may
 * @version 1.0
 * @description 单元测试
 * @date 2025/2/5  20:00
 */
@SpringBootTest
public class CourseBaseMapperTests {

    @Autowired
    private CourseBaseMapper courseBaseMapper;

    @Test
    public void testCourseBaseMapper() {
        CourseBase courseBase = courseBaseMapper.selectById(18L);
//        System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++");
//        System.out.println("courseBase=" + courseBase);
        Assertions.assertNotNull(courseBase);
        //进行分页查询的单元测试
        //1.拼装查询条件
        //1.1 查询条件
        QueryCourseParamsDto courseParamsDto = new QueryCourseParamsDto();
        courseParamsDto.setCourseName("java");
        courseParamsDto.setPublishStatus("202004");
        //1.2新建wrapper
        LambdaQueryWrapper<CourseBase> queryWrapper = new LambdaQueryWrapper<>();
        //1.3根据名称模糊查询,在sql中拼接course_base.name like '%值%'
        queryWrapper.like(StringUtils.isNotEmpty(courseParamsDto.getCourseName()),
                CourseBase::getName,courseParamsDto.getCourseName());
        //1.4根据课程审核状态查询,在sql中拼接course_base.audit_status=?
        queryWrapper.eq(StringUtils.isNotEmpty(courseParamsDto.getAuditStatus()),
                CourseBase::getAuditStatus,courseParamsDto.getAuditStatus());
        //1.4根据课程发布状态查询publishStatus
        queryWrapper.eq(StringUtils.isNotEmpty(courseParamsDto.getPublishStatus()),
                CourseBase::getAuditStatus,courseParamsDto.getPublishStatus());
        //1.5创建page分页参数对象,参数:当前页码数/每页记录数
        //1.5.1 获取page分页参数
        PageParams pageParams = new PageParams();
        pageParams.setPageNo(1L);
        pageParams.setPageSize(2L);
        //1.5.2将pageParams参数传入page
        Page<CourseBase> page = new Page<>(pageParams.getPageNo(), pageParams.getPageSize());
        //1.6开始分页查询
        Page<CourseBase> pageResult = courseBaseMapper.selectPage(page, queryWrapper);
        //1.7获取查询结果中的列表和总记录数
        //数据列表
        List<CourseBase> records = pageResult.getRecords();
        //总记录数
        long total = pageResult.getTotal();
        //2.1 需要最终返回一个PageResult对象,包括List<T> items, long counts, long page, long pageSize四个参数
//        PageResult<CourseBase> courseBasePageResult = new PageResult<>();
//        courseBasePageResult.setItems(records);
//        courseBasePageResult.setCounts(total);
//        courseBasePageResult.setPage(pageParams.getPageNo());
//        courseBasePageResult.setPageSize(pageParams.getPageSize());
        PageResult<CourseBase> courseBasePageResult =
                new PageResult<>(records, total, pageParams.getPageNo(), pageParams.getPageSize());
        System.out.println(courseBasePageResult);
    }
}


http://www.kler.cn/a/534347.html

相关文章:

  • AI绘画:解锁商业设计新宇宙(6/10)
  • 【C++】STL——list的使用
  • UE求职Demo开发日志#21 背包-仓库-装备栏移动物品
  • SQL范式与反范式_优化数据库性能
  • Hot100之堆
  • 怀旧经典:1200+款红白机游戏合集,Windows版一键畅玩
  • 北大AGI与具身智能评估新范式!Tong测试:基于动态具身物理和社会互动的评估标准
  • 【go语言】protobuf 和 grpc
  • mixin
  • STM32 串口收发数据包
  • 基于springboot+vue的青少年心理健康教育网站的设计与实现
  • Qt跨屏窗口的一个Bug及解决方案
  • FRP通过公网IP实现内网穿透
  • 日期选择控件,时间跨度最大一年。
  • springboot停车场管理系统设计与实现
  • 【高级篇 / IPv6】(7.2) ❀ 04. 在60E上配置ADSL拨号宽带上网(IPv4) ❀ FortiGate 防火墙
  • SQL 秒变三线表 sql导出三线表
  • Android studio ternimal 中gradle 指令失效(gradle环境变量未配置)
  • 表格文字的版面分析,PHP语言实现表格识别功能
  • 力扣hot100-双指针
  • 挑战项目 --- 微服务编程测评系统(在线OJ系统)
  • oracle 基础语法复习记录
  • 信息学奥赛一本通 2101:【23CSPJ普及组】旅游巴士(bus) | 洛谷 P9751 [CSP-J 2023] 旅游巴士
  • 4-ET框架demo的运行
  • react的antd表格自定义图标
  • 缓存类为啥使用 unordered_map 而不是 map