Spring OAuth2环境下@WebMvcTest切片测试启动失败求助
我来帮你排查这个@WebMvcTest切片测试上下文启动失败的问题,结合你给出的代码片段,先梳理几个常见的排查方向:
1. 先检查最明显的拼写错误
你代码最后一行的@Autowired Feedbac...明显是未写完的拼写(大概率是FeedbackEndpoint或FeedbackFacade),这种拼写错误会直接导致Spring无法找到对应的Bean,抛出NoSuchBeanDefinitionException,这是最容易忽略的低级问题。
2. 修正@WebMvcTest的参数使用
@WebMvcTest的value属性是用来指定要测试的控制器类的,不需要把内部的TestConfiguration也放在这个列表里。Spring会自动识别静态内部类的@TestConfiguration,把它从value中移除即可:
@WebMvcTest(FeedbackEndpoint) // 只指定要测试的控制器 class FeedbackEndpointSliceSpec extends Specification implements SampleFeedbacks { // ... 内部TestConfiguration保持不变 }
3. 确认Spock Mock依赖与配置是否正确
你用了Spock的DetachedMockFactory来创建Stub,要确保:
- 项目中已经引入了
spock-spring依赖(如果是Gradle,依赖应该是testImplementation 'org.spockframework:spock-spring:2.3-groovy-4.0'这类,版本要和Spring Boot兼容) - 不要在测试类上额外添加
@SpringBootTest,@WebMvcTest本身就是切片测试注解,两者混用会导致上下文加载异常
4. 检查控制器的依赖是否都被Mock
FeedbackEndpoint如果还有其他业务层依赖(除了FeedbackFacade),必须在FeedbackTestConfig中为每个依赖提供Mock/Stub实例。@WebMvcTest只会加载控制器相关的Bean,所有业务层Bean都需要手动Mock,遗漏的话会抛出Bean创建异常。
5. 查看具体异常日志定位根本原因
如果上面的点都排查过还是失败,一定要看控制台输出的完整异常栈信息:
- 如果是
BeanCreationException,通常是某个Bean的初始化逻辑有问题 - 如果是
NoSuchBeanDefinitionException,就是某个依赖的Bean没被正确提供 - 如果是
ClassNotFoundException,可能是依赖缺失或包扫描配置问题
给你一个修正后的代码示例参考:
@WebMvcTest(FeedbackEndpoint) class FeedbackEndpointSliceSpec extends Specification implements SampleFeedbacks { @TestConfiguration static class FeedbackTestConfig { DetachedMockFactory detachedMockFactory = new DetachedMockFactory() @Bean FeedbackFacade feedbackFacade() { return detachedMockFactory.Stub(FeedbackFacade) } } // 确保Autowired的类拼写完全正确 @Autowired private MockMvc mockMvc @Autowired private FeedbackFacade feedbackFacade def "测试反馈接口的正常返回"() { given: // 配置Stub的行为 feedbackFacade.getFeedback(_) >> sampleFeedback() when: def result = mockMvc.perform(get("/feedback/1")) then: result.status.isOk() } }
内容的提问来源于stack exchange,提问作者rechandler
相关产品推荐
相关产品推荐

