在SSM项目中进行单元测试时Mapper接口空指针异常

1. 问题描述

前提:SSM框架搭建成功。

在搭建好SSM框架后,对Mapper接口里的方法进行junit单元测试,结果在Service层依赖注入Mapper接口时报错java.lang.NullPointerException

具体代码实现如下:

@Service
public class UserService {
    @Autowired
    UserMapper userMapper;
    
    @Test
    public void testMapper(){
        User user = new User();
        user.setName("Tom");
        user.setPassword("2468");
        System.out.println(userMapper);
        List<User> user1 = userMapper.selectUserByInstance(user);
        System.out.println(user1);
    }
}

在这里插入图片描述
在启动Tomcat时,Mapper接口是注入成功的,但在单元测试时,却无法获取到Mapper接口的bean。

所以不应该是配置的问题,而是junit单元测试时无法从Spring中获取Mapper实例。

2. 问题原因

在单元测试中无法依赖注入Mapper接口的原因是因为Mapper接口是由Mybatis框架在运行时动态生成的代理类,而在单元测试中并没有启动整个Spring容器,也就无法使用Mybatis框架生成的代理类。

3. 解决方法

解决这个问题的方法有两种:

  1. 使用Mockito框架模拟Mapper接口的实现,从而达到依赖注入的效果。
  2. 使用spring-test测试模块进行测试。

4. 使用spring-test对SSM进行项目测试

因为Spring Test是Spring框架提供的一个测试模块,所以这里使用官方的测试方法。Mockito框架的使用可以自行查找。

4.1 导入依赖坐标

如果你的项目是maven构建的,可以在pom.xml中导入spring-test的依赖:

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-test</artifactId>
	<version>${spring.version}</version>
</dependency>

这里依赖的版本要根据自己项目的spring版本来设置,因为我再pom.xml中配置了spring版本管理,所以<version>坐标处的值为${spring.version}

4.2 添加注解

在被测试类的头部加上@RunWith@ContextConfiguration 注解。

  • @RunWith:这个注解用于指定一个测试运行器,它决定了如何运行测试。
  • @ContextConfiguration:这个注解用于指定一个配置类,它定义了应用程序的配置信息。通常这个注解被用在测试类的上面,用于加载 Spring 配置文件或配置类。

4.3 完整示例

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
......

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:Spring.xml","classpath*:SpringMVC.xml"})
@Service
public class UserService {
    @Autowired
    UserMapper userMapper;
    
    @Test
    public void testMapper(){
        User user = new User();
        user.setName("Tom");
        user.setPassword("2468");
        System.out.println(userMapper);
        List<User> user1 = userMapper.selectUserByInstance(user);
        System.out.println(user1);
    }

}

在这里插入图片描述
在这里插入图片描述

在这里需要注意@ContextConfiguration里的参数是否与自己的配置文件的属性相对应。
就如"classpath*:Spring.xml" 会在类路径下的所有目录中搜索名为 “Spring.xml” 的文件。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSMSpring + Spring MVC + MyBatis)框架作为Java开发的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您从零基础开始,逐步掌握SSM的核心技术和最佳实践,助您在Java Web开发领域更上一层楼。 二、资料亮点 基础教程与练习项目:从基础知识讲起,结合实际练习项目,让您轻松上手SSM开发。 进阶技术与案例分析:针对进阶开发者,提供深入的技术探讨和案例分析,助您深入理解SSM的高级特性。 实战项目与经验分享:通过实际项目实战,让您在实践掌握SSM的运用,同分享经验与心得,让您少走弯路。 三、适用人群与场景 无论您是初学者还是资深开发者,无论您是在校学生还是职场人士,本系列资料都将是您学习SSM的得力助手。适用于Java Web开发、企业级应用开发、个人项目实践等多个领域。 四、使用建议 系统学习:按照资料提供的顺序进行系统学习,确保知识体系的完整性。 实践为王:在学习过程注重实践操作,通过实际项目加深理解。 持续反馈与调整:根据学习进度和反馈,适调整学习策略,提高学习效果。 五、安全与责任 在使用SSM框架进行开发,请确保遵循最佳实践和安全准则,以保障系统的稳定性和安全性。在使用提供的资料,请遵守版权法规,尊重原作者的权益。让我们共同为推动SSM技术的发展而努力!
SSM项目小学数学在线测试系统是一个基于SpringSpringMVC和MyBatis框架的Java企业级应用,旨在为小学生提供一个在线进行数学测试的平台。 以下是关于SSM项目小学数学在线测试系统的详细介绍: 1. **系统功能**:该系统可能包括学生登录认证、在线答题、题库管理、成绩记录和分析等功能模块。学生可以通过学号登录系统,在在线测试模块进行数学题目的练习和测试。此外,系统可能还包含教师或管理员端,用于管理题库、布置作业、查看学生成绩等。 2. **技术实现**:项目利用了SSM框架Spring进行整体的业务逻辑管理,SpringMVC负责前后端的交互和页面渲染,而MyBatis处理与数据库的交互。这种分层架构确保了系统的高可靠性和易于维护。 3. **前后端分离**:前端可能使用了HTML5、CSS3和JavaScript等技术构建用户界面,后端则使用Java开发,通过RESTful API与前端进行数据交互,提高了系统的可维护性和可扩展性。 4. **数据库设计**:系统后端可能采用了MySQL或其他关系型数据库来存储用户信息、题库内容、答题记录等,同保证了数据的安全性和一致性。 5. **用户体验**:系统提供了清晰直观的用户界面,使得学生能够轻松上手,快速完成在线测试和练习。 6. **安全性和可扩展性**:系统在用户认证、权限控制等方面进行了严格的设计,以确保数据的安全。同,系统的模块化设计和遵循的编码标准也便于未来的升级和维护。 总的来说,SSM项目小学数学在线测试系统是一个高效、现代化的教育辅助工具。它不仅能够帮助学生在家也能够进行数学学习和测试,还能够通过数据分析帮助教师了解学生的学习情况,从而提供个性化的教学辅导。
出现"this.****Mapper is null"的问题通常是由于Mapper对象没有被正确注入导致的。根据您提供的信息,您的SSM项目使用了MyBatis进行数据库操作,而出现空指针异常的问题可能与Mapper对象的注入有关。 在SSM项目Mapper对象通常是通过Spring的依赖注入功能进行注入的。请确保您的Mapper接口已经正确配置为Spring的bean,并且在相应的地方进行了注入。对于您提供的例子,RoleMapper和PermissionMapper接口应该被正确配置,并且在需要使用它们的地方进行了注入。 请检查以下几个方面来解决这个问题: 1. 确保在Spring的配置文件正确配置了Mapper接口的扫描路径,使其能够被Spring扫描到并注册为bean。 2. 确保Mapper接口上添加了`@Mapper`注解,以告诉MyBatis框架将其作为Mapper接口进行处理。 3. 确保在需要使用Mapper对象的地方,使用`@Autowired`注解将其注入。 例如,假设您的Mapper接口位于`com.wzh.mapper`包下,您可以在Spring的配置文件添加以下配置: ```xml <!-- 扫描Mapper接口所在的包 --> <mybatis:scan base-package="com.wzh.mapper" /> ``` 然后,在需要使用Mapper对象的地方,使用`@Autowired`注解进行注入,例如在Service类: ```java @Autowired private RoleMapper roleMapper; @Autowired private PermissionMapper permissionMapper; ``` 这样就可以确保Mapper对象被正确注入,避免出现空指针异常。 另外,还需要确保数据库连接配置、MyBatis配置以及Mapper映射文件的配置都正确无误。如果以上步骤都没有解决您的问题,可以进一步检查日志文件,查看是否有其他错误或异常信息提供更多线索。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SSM项目整合测试出现this.****Mapper is null的问题](https://blog.csdn.net/weixin_51337996/article/details/126958819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SSM整合shiro](https://blog.csdn.net/weixin_68509156/article/details/126186110)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值