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);
}
}