SpringBoot多模块单元测试JPA+MyBatisPlus


前言

本文章内容适合 SpringBoot多模块单系统采用H2内存测试库. 这种情况颇为复杂.因为单元测试必须要依靠主启动类程序. 多模块我试过,每个模块单独设置测试启动类.但是发现一个问题.每个模块都需要mapper扫描.需要关联依赖,还需要在那个模块中引入配置文件.否则读取不到. 也就是说单元测试的性质变了.每个模块的单元测试启动类都需要.像主启动类一样.需要完整的环境加载.这严重偏离了单元测试的目标! 但其实我的简便的正确方式就是利用了主启动类的完整的环境.有人可能会说@MockBean,或声明独立测试类.那可能会犯我后面举的三个错误.

JPA作用是代码生成表.MyBatisPlus来CRUD.取二者长处

如下将会先给出测试的简便方式.之后给出错误方式及原因!如若按照正确方式还是有问题,不妨看下三个错误方法.里面可能有解决你问题的相关原因.特别是第三个错误

一. 简便的正确方式

1.首先给出测试结构
在这里插入图片描述

2.在主启动类模块主要需要引入的依赖(我的版本受父pom管理 spring2.6.3 mp3.5.1)

        <!-- mp-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        
        <!--内存测试数据库-->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
                <!--jpa代码生成表-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

3.application-test.yml配置

server:
  port: 8080
# DataSource Config  H2内存数据库基本数据
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:test;DATABASE_TO_UPPER=false;
    username: root
    password:
	
  jpa:
  	# 代码自动生成表
    defer-datasource-initialization: true
    hibernate:
      ddl-auto: update
    generate-ddl: false
    # 在控制台打印sql
    show-sql: true
    # mysql转h2方言配置
#    properties:
#      hibernate:
#        dialect: org.hibernate.dialect.MySQL5Dialect

# MyBatis-plus配置
mybatis-plus:
	# mapper的namespace可以简写
  type-aliases-package: com.vector.**.domain
  # mapper-locations: classpath*全包依赖扫描; classpath自己的mapper
  mapper-locations: classpath*:mapper/**/*Mapper.xml
  #  统一设定自增主键
  global-config:
    db-config:
      id-type: auto
      logic-delete-value: 1
      logic-not-delete-value: 0
  lazy-initialization: true

4.给出实体类介绍
在这里插入图片描述
如图@Entity,@Table,@Id,@GeneratedValue是jpa的注解.主要为了测试初始化数据时.代码生成表

5.给出主启动模块的测试类测试另一个模块的一个service方法

在这里插入图片描述
这步需要注意的是应当保证测试包和被测试的类包路径相同,如下,下方articleServiceImpl在com.vector.service.impl包下.那测试的类也应当建在com.vector.service.impl下.否则可能找不到. 上面的配置文件名是application-test.yml.我们用@ActiveProfiles激活测试配置
在这里插入图片描述
在这里插入图片描述

如果在运行时报找不到某张表,或某个字段没有因此不能生成表结构 那么一定是那个实体 或 service调mapper,mapper生成的实体
没有加上述的注解或配置的方言出错


二. 以下介绍错误方法一

项目结构描述:
在这里插入图片描述

单元测试配置在admin的resource中.application-test.yml

server:
  port: 8080
# DataSource Config
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:test;DATABASE_TO_UPPER=false
    username: root
    password:

# MyBatis-plus配置
mybatis-plus:
  # 只有service模块的实体是pojo,其余模块为domain
  type-aliases-package: com.vector.**.pojo
  # mapper-locations: classpath*全包依赖扫描; classpath自己的mapper
  mapper-locations: classpath*:mapper/**/*Mapper.xml
  #  统一设定自增主键
  global-config:
    db-config:
      id-type: auto
      logic-delete-value: 1
      logic-not-delete-value: 0

方法一: 在service模块的测试文件中测试service层
在这里插入图片描述
@SpringBootTest(classes = ArticleServiceImplTest.class)声明了这是独立测试.不依赖这个项目的任何启动类.

在这里插入图片描述
如下报错:
在这里插入图片描述
这是因为mapperScan引起的.他扫描了本项目的所有被本模块依赖的mapper.让你必须添加这些没有用到的实体对象.
这和单元测试大相径庭.那去掉@MapperScan 加上@MockBean可以吗? 不可以!! 他是模拟数据.不会真正将数据入库!


三. 以下介绍错误方法二

方法二: 在service模块中创建测试启动类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可能和主启动类模块mapper重复扫描引起.

四. 以下介绍错误方法三

方法三: 在主启动类写其他模块的测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个和简便的正确方法相近,但报错.因为我自定义配置了Bean.而我的测试文件删除了druid相关参数的配置.当bean读取配置文件,不存在这些属性.就报错.解决方法很多,我是删除bean换用配置文件自动装配.


  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
基于Spring Boot 2.0、Spring Data JPA、Thymeleaf和Shiro开发的后台管理系统可以实现一个功能强大且易于维护的应用程序。 这套技术栈的优势包括: 1. Spring Boot 2.0:它是一个快速构建应用程序的框架,提供自动化配置和减少样板代码的优势,使开发变得更加高效。 2. Spring Data JPA:它是一个基于JPA的持久化框架,通过简化数据库操作和提供对各种数据库的支持,大大减少了开发人员的工作量。 3. Thymeleaf:它是一个服务器端的Java模板引擎,可以直接处理HTML、XML、JavaScript、CSS和文本等内容。它具有易于学习和使用的特点,并且能够与Spring Boot实现良好的集成。 4. Shiro:它是一个功能强大且灵活的Java安全框架,可以提供认证、授权、加密和会话管理等功能。通过集成Shiro,我们可以轻松实现后台管理系统的用户认证和访问控制等安全需求。 基于这套技术栈,我们可以开发一个后台管理系统,实现用户登录、权限管理、菜单管理、角色管理、用户管理等功能。利用Spring Boot的自动化配置和快速启动特性,我们可以快速搭建项目的骨架,并集成Spring Data JPA实现数据访问,利用Thymeleaf开发可复用的页面组件,通过Shiro实现用户认证和授权。 总之,基于Spring Boot 2.0、Spring Data JPA、Thymeleaf和Shiro的后台管理系统,不仅可以极大地提高开发效率,还能够提供丰富的功能和安全性,帮助我们快速构建高质量的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最难不过坚持丶渊洁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值