weixin_44854681 2025-05-06 13:58 采纳率: 83.3%
浏览 51
已结题

单元测试bean无法注入,始终找不到解决办法!

进行springboot多模块工程开发,其中一个模块,测试mapper使用情况,springbootest测试类中用@Autowared注解注入该mapper,但测试程序始终报错说没有定义该mapper bean,也在相应的配置类中添加了@MapperScan扫描mapper,配置类如下图:

img

单元测试类如下图:

img

从网上查到有时候需要在启动类上加mapperscan注解,但试过了,始终不行。报错信息如下:

img

求相救,可以留下联系方式,我加您,协助我解决,非常感谢!

  • 写回答

5条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-05-06 17:50
    关注

    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。
    如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!

    Spring Boot 单元测试中Bean注入问题解决方案

    根据您提供的信息,您在使用Spring Boot多模块工程时遇到了Mapper无法注入的问题。以下是详细的解决方案:

    问题分析

    1. 您的测试类使用了@SpringBootTest(classes = CourseBaseMapperTest.class),这会导致Spring只加载测试类本身,而不会加载完整的应用上下文
    2. 您的MybatisPlus配置类看起来是正确的,但可能没有被测试上下文加载
    3. 错误信息显示"No qualifying bean of type 'com.xuecheng.content.mapper.CourseBaseMapper' available",表明Spring容器中没有找到Mapper bean

    解决方案

    1. 修改测试类注解

    您的测试类应该指定主配置类或启动类,而不是测试类本身:

    @SpringBootTest(classes = YourMainApplication.class)
    public class CourseBaseMapperTest {
        @Autowired
        private CourseBaseMapper courseBaseMapper;
        
        @Test
        void testCourseBaseMapper() {
            System.out.println(courseBaseMapper);
        }
    }
    

    2. 确保Mapper扫描配置正确

    您的MybatisPlus配置类看起来是正确的,但需要确保:

    1. 配置类位于能被组件扫描到的包下
    2. @MapperScan注解指定了正确的Mapper接口包路径
    @Configuration
    @MapperScan("com.xuecheng.content.mapper")
    public class MybatisPlusConfig {
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
            return interceptor;
        }
    }
    

    3. 多模块项目注意事项

    如果是多模块项目,请确保:

    1. 测试模块依赖了包含Mapper的模块
    2. 在pom.xml中添加了必要的依赖:
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${mybatis.version}</version>
    </dependency>
    

    4. 检查启动类配置

    确保您的启动类位于根包下,或者至少比Mapper接口所在的包更高层级:

    @SpringBootApplication
    @MapperScan("com.xuecheng.content.mapper")
    public class YourMainApplication {
        public static void main(String[] args) {
            SpringApplication.run(YourMainApplication.class, args);
        }
    }
    

    其他可能的问题

    1. Mapper接口是否添加了@Mapper注解:如果使用@MapperScan可以不加,但确保至少有一种方式
    2. MyBatis版本冲突:检查pom.xml中是否有版本冲突
    3. 多数据源配置问题:如果配置了多数据源,需要额外配置

    如果以上方法都不能解决您的问题,可以提供更多信息:

    1. 项目结构截图
    2. pom.xml文件内容
    3. 完整的错误堆栈

    您也可以尝试在测试类上添加@ContextConfiguration注解来显式指定配置类:

    @SpringBootTest
    @ContextConfiguration(classes = {MybatisPlusConfig.class, YourDataSourceConfig.class})
    public class CourseBaseMapperTest {
        // ...
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 5月21日
  • 已采纳回答 5月13日
  • 创建了问题 5月6日