SpringBoot控制器测试报SecurityAutoConfiguration.class不存在如何解决
问题分析
报错核心原因是Spring Boot测试启动时默认加载安全模块的自动配置类SecurityAutoConfiguration,但当前项目环境中不存在该类对应的依赖包,同时测试类存在注解配置冲突的问题。
解决方案
- 修正测试注解冲突
现有代码同时使用了@SpringBootTest和@ContextConfiguration两个上下文配置注解,二者逻辑冲突会导致配置加载异常。如果仅做Controller层单元测试,推荐使用更轻量的@WebMvcTest注解替代原有组合注解,@WebMvcTest已经默认集成了MockMvc的自动装配,不需要额外添加@AutoConfigureMockMvc注解,Spring Boot 2.2+版本也不需要额外添加@RunWith注解,示例配置如下:
@WebMvcTest(value = PersonController.class, excludeAutoConfiguration = { org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration.class }) @ActiveProfiles("test") public class PersonControllerTest { // 原有测试逻辑保留 }- 修正测试注解冲突
- 修正配置类拼写错误
原有@ContextConfiguration中配置的PersonCOnfig类名大小写错误,正确应为PersonConfig,如果确实需要引入自定义配置,可在@WebMvcTest中通过@Import(PersonConfig.class)引入即可。
- 修正配置类拼写错误
- 修复断言语法错误
测试方法中jsonPath的写法缺少层级分隔符,$id需要修改为$.id,其余$name、$lastName等字段同理,否则即使项目启动成功,断言也会执行失败。
- 修复断言语法错误
- 可选依赖补充
如果项目实际需要使用Spring Security能力,可在pom.xml(Maven)中引入对应starter依赖即可解决类找不到的问题:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>- 可选依赖补充
内容的提问来源于stack exchange,提问作者Raghu Palakodety
相关产品推荐
相关产品推荐

