为何使用@ActiveProfiles激活测试Profile时取spring.profiles.active返回null
问题原因
- 你声明的
ConfigurableEnvironment是Mockito生成的Mock代理对象,而非Spring测试上下文里的真实实例。@Mock注解生成的Mock对象所有方法默认返回null,完全没有绑定Spring容器的配置信息,自然读取不到spring.profiles.active的值。 - 代码中
@Before方法里执行的MockitoAnnotations.initMocks(this)会再次初始化所有带@Mock注解的字段,彻底切断和Spring上下文的关联,即便你之前用@Autowired注入实例,只要字段加了@Mock也会被覆盖为空Mock对象。 - 额外提醒:你提供的代码存在拼写笔误,
@Mock声明的变量名为enviroment(少了字母n),测试方法里调用的是environment.getProperty,如果是实际运行的代码会直接触发编译错误。
解决方案
如果你需要读取到真实的激活profile值,直接将@Mock替换为@Autowired注入Spring容器自带的ConfigurableEnvironment即可:
// 替换@Mock为@Autowired @Autowired private ConfigurableEnvironment environment;
修改后调用environment.getProperty("spring.profiles.active")就能正确返回test。
内容的提问来源于stack exchange,提问作者sammy
相关产品推荐
相关产品推荐

