You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot+Mybatis MockMvc测试报错:需配置sqlSessionFactory或sqlSessionTemplate

解决Spring MockMvc测试时抛出Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required异常

这个问题我之前也碰到过,本质是测试环境下MyBatis Mapper的注入逻辑没处理对,结合你用的Spring Boot + MyBatis Starter技术栈,给你几个针对性的解决方案:

1. 切换到完整上下文测试(适合需要真实Mapper操作的场景)

如果你需要在测试中调用真实的Mapper逻辑,不要单独使用@WebMvcTest注解——它只会加载控制器层的Bean,不会初始化MyBatis相关的SqlSessionFactory、SqlSessionTemplate等核心组件,导致Mapper无法注入。

正确的做法是用@SpringBootTest结合@AutoConfigureMockMvc,这样会加载完整的Spring上下文,包括MyBatis的配置:

@SpringBootTest
@AutoConfigureMockMvc
public class YourControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private YourMapper yourMapper; // 现在可以正常注入Mapper

    @Test
    public void testControllerWithRealMapper() throws Exception {
        // 先通过Mapper准备测试数据
        yourMapper.insertTestData(new TestData());

        // 执行接口测试
        mockMvc.perform(get("/api/your-endpoint"))
               .andExpect(status().isOk())
               .andExpect(jsonPath("$.code").value(200));
    }
}

2. Mock掉Mapper依赖(适合仅测试控制器逻辑的场景)

如果你只想测试控制器的请求处理、参数校验等逻辑,不需要调用真实的数据库操作,可以用@MockBean注解模拟Mapper,避免触发MyBatis的初始化流程:

@WebMvcTest(YourController.class)
public class YourControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private YourMapper yourMapper; // 用Mockito模拟Mapper

    @Test
    public void testControllerLogic() throws Exception {
        // 预设Mapper的返回值
        when(yourMapper.getById(anyLong())).thenReturn(new TestData(1L, "test"));

        // 执行接口测试
        mockMvc.perform(get("/api/your-endpoint/1"))
               .andExpect(status().isOk())
               .andExpect(jsonPath("$.data.name").value("test"));
    }
}

3. 检查MyBatis基础配置是否正确

除了测试注解的问题,还要确认项目本身的MyBatis配置没问题:

  • 启动类上是否添加了@MapperScan("com.yourpackage.mapper"),确保Mapper接口被扫描到;
  • application.yml/application.properties中是否配置了mybatis.mapper-locations,指定Mapper XML文件的位置(比如classpath:mapper/*.xml);
  • 确认mybatis-spring-boot-starter1.3.2和你的Spring Boot版本兼容(1.3.2对应Spring Boot 1.5.x系列,版本不匹配也可能导致初始化失败)。

按照上面的步骤调整后,应该就能解决这个异常,顺利完成控制器测试了。

内容的提问来源于stack exchange,提问作者Longshi Shen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:22:59