springboot学习笔记:执行单元测试时,mapper默认扫描路径为启动类的包名

本文主要是介绍springboot学习笔记:执行单元测试时,mapper默认扫描路径为启动类的包名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境

springboot:2

前言

情况是这样的:

  1. 对新建的项目,进行模块调整:按照DDD的架构,设计各个module。
  2. 当把启动类Application.java调整包路径后,发现单元测试执行失败;
  3. 调整的具体操作是,将原有的包com.alibaba.模糊.模糊改为com.alibaba.模糊.模糊.start。也就是加了一个start路径。
  4. 然后又将启动类的包路径还原回去后,单元测试执行成功。
  5. 纠结了一下午,加一晚上终于找到原因了。特此记录下。

在这里插入图片描述
当执行单元测试时,会报错,我们看到下图红线处的提示,Mybatis尝试在com.alibaba.模糊.模糊.start这个包下扫描mapper时,在这个包下找不到相关的mapper
在这里插入图片描述
我把红线处的错误,单独贴出来,如下:

o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.alibaba.模糊.模糊.start]' package. Please check your configuration.

根据提示,是com.alibaba.模糊.模糊.start这个包路径下,没有找到mapper
但是我的mapper类,本来就不在[com.alibaba.模糊.模糊.start]路径下,该路径是启动类的包路径。
在这里插入图片描述

单元测试mapper扫描的包路径默认是启动类的路径

由上面的情况,我们可以知道:单元测试mapper扫描的包路径默认是启动类的路径
因为我的项目是按照DDD模式,进行模块化的,XxxMapper类,在infrastructure模块中,其包路径是:com.alibaba.模糊.模糊.infrastructure

要解决这个问题,有两种办法:

方法一: 在单元测试里,加@MapperScan指定扫描路径
在这里插入图片描述
即:@MapperScan("com.alibaba.模糊.模糊.infrastructure")

这种改法有个缺点,就是每次单元测试用例都得加,一百个单元测试,得加一百遍。

方法二:在启动类中指定@MapperScan

在这里插入图片描述
即:@MapperScan("com.alibaba.模糊.模糊.infrastructure.模糊.mybatis")

这样就不用每次都在单元测试里面添加了。

加餐

知识背景:

@Mapper及@MapperScan注解是Spring boot Mybatis的注解,并非属于SpringBoot。

所以单独使用@Mapper而不使用@MapperScan是没问题的

这个项目脚手架生成的代码,只使用了@Mapper,并没有在启动类中用@MapperScan
在这里插入图片描述
也就是说,如果你的项目一开始就是在启动类中使用:@MapperScan,那么你都不会遇到这个问题;

总结

单元测试的扫描路径范围默认是和主启动类一致的。即使在application.properties或者test.properties中指定了mybatis.config-location也是没用的:

# mybatis 即使指定了,单元测试也不会用到。
mybatis.config-location=classpath:/mybatis/mybatis-config.xml

需要使用@MapperScan进行指定包路径。

这篇关于springboot学习笔记:执行单元测试时,mapper默认扫描路径为启动类的包名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112088

相关文章

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为