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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:22:12