DennisXi 2025-02-21 01:15 采纳率: 46.2%
浏览 9
已结题

springboot集成mybatis,单元测试dao层对象方法空指针报错

在使用springboot框架集成mybatis,正常运行三层结构已经能从数据库正常查询出数据,但是想用单元对mapper中的接口方法单独进行测试,会报空指针异常。

img

img

img

img

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-02-21 01:15
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题解答

    你使用 Spring Boot 集成 MyBatis,正常情况下可以从数据库查询出数据,但是当你想单独测试 Mapper 中的接口方法时,却报空指针异常。

    解决方案:

    1. 使用 @Autowired 注入 Mapper 对象
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class MyMapperTest {
    
        @Autowired
        private MyMapper myMapper;
    
        @Test
        public void testSelect() {
            List<User> users = myMapper.selectUsers();
            // ...
        }
    }
    
    1. 使用 @Resource 注入 Mapper 对象
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class MyMapperTest {
    
        @Resource
        private MyMapper myMapper;
    
        @Test
        public void testSelect() {
            List<User> users = myMapper.selectUsers();
            // ...
        }
    }
    
    1. 使用 @MockBean 模拟 Mapper 对象
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class MyMapperTest {
    
        @MockBean
        private MyMapper myMapper;
    
        @Test
        public void testSelect() {
            when(myMapper.selectUsers()).thenReturn(Arrays.asList(new User()));
            List<User> users = myMapper.selectUsers();
            // ...
        }
    }
    
    1. 使用 @SpyBean.spying 对象
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class MyMapperTest {
    
        @SpyBean
        private MyMapper myMapper;
    
        @Test
        public void testSelect() {
            List<User> users = myMapper.selectUsers();
            // ...
        }
    }
    

    这些方法都可以解决你遇到的问题,但是需要根据你的实际情况选择合适的方法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月17日
  • 已采纳回答 3月9日
  • 创建了问题 2月21日