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

如何在Spring Boot的@WebMvcTest测试中使用@ActiveProfiles?

解决@WebMvcTest中Profile配置类无法加载Mock Bean的问题

我一眼就发现了导致你报错的核心问题——Profile名称拼写不一致!

你的配置类上标注的是@Profile("mockService"),但测试类的@ActiveProfiles指定的是"mockServices"(末尾多了一个s)。Spring找不到对应Profile的配置类,自然不会创建Mock版本的VotingService Bean,最终抛出NoSuchBeanDefinitionException。

下面是完整的修复步骤:

1. 统一Profile名称

先把配置类和测试类的Profile名称改成一致,比如都用"mockServices":

修正后的配置类:

@Profile("mockServices") 
@Configuration 
public class NotificationServiceTestConfiguration { 
    @Bean 
    @Primary 
    public VotingService getVotingService() { 
        return Mockito.mock(VotingService.class); 
    } 
}

测试类的@ActiveProfiles保持不变:

@ActiveProfiles("mockServices") 
@RunWith(SpringRunner.class) 
@WebMvcTest(VoteController.class)
public class VoteControllerTest { 
    // ... 你的测试代码
}

2. 确保配置类被Spring扫描到

@WebMvcTest默认只会扫描控制器所在的包,如果你的NotificationServiceTestConfiguration不在测试类的同包或子包下,Spring无法自动发现它。这时候需要手动导入配置类:

@ActiveProfiles("mockServices") 
@RunWith(SpringRunner.class) 
@WebMvcTest(VoteController.class)
@Import(NotificationServiceTestConfiguration.class) // 手动导入测试配置
public class VoteControllerTest { 
    // ... 你的测试代码
}

3. 验证@Primary的优先级(可选但推荐)

如果你的真实VotingService Bean没有指定Profile(即默认加载),那么激活mockServices时,真实Bean和Mock Bean都会存在。@Primary注解能确保Spring优先注入Mock版本的Bean,避免依赖注入冲突。

完成以上步骤后,Spring就能正确加载你的Mock配置类,创建VotingService的Mock实例并注入到VoteController中,解决Bean找不到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:38:10