为啥 environment.getProperty("spring.profiles.active") 在使用 @ActiveProfiles 激活测试中的配置文件时返回 nul
Posted
技术标签:
【中文标题】为啥 environment.getProperty("spring.profiles.active") 在使用 @ActiveProfiles 激活测试中的配置文件时返回 null【英文标题】:Why does environment.getProperty("spring.profiles.active") return null on activating a Profile in Tests with @ActiveProfiles为什么 environment.getProperty("spring.profiles.active") 在使用 @ActiveProfiles 激活测试中的配置文件时返回 null 【发布时间】:2021-12-08 02:23:34 【问题描述】:如果我在测试中使用@ActiveProfiles 激活配置文件,例如@ActiveProfiles("test"),并在测试中声明@Mock private ConfigurableEnvironment 环境,我是否能够检索 environment.getProperty("spring.profiles.active" )。我得到的值为 null。
示例测试如下
@RunWith(SpringJUnit4ClassRunner.class)
@WebMvcTest(value = ProductController.class)
@ActiveProfiles("test)
class ProductControllerTest
@Autowired
private MockMvc mockMvc;
@MockBean
private ProductServiceImpl productServiceImpl;
@Mock
private ConfigurableEnvironment enviroment;
@Before
public void setup()
MockitoAnnotations.initMocks(this);
@Test
public void test() throws Exception
String profile = environment.getProperty("spring.profiles.active"); // -> This returns null ...why ? If i am setting ActiveProfile as test ..why does above return null?
【问题讨论】:
你应该提供更多的上下文 【参考方案1】:这里正在模拟 ConfigurableEnvironment 环境,因此您将无法使用它检索任何值。请使用实际的bean:
@Autowired
private ConfigurableEnvironment enviroment;
Mockito 模拟用于需要提供虚拟值的场景。请参考:https://www.baeldung.com/mockito-annotations了解如何使用模拟。
【讨论】:
您好 balias,感谢您的回复。使用实际的 bean 也没有奏效。 environment.getProperty("spring.profiles.active") 仍然返回 null以上是关于为啥 environment.getProperty("spring.profiles.active") 在使用 @ActiveProfiles 激活测试中的配置文件时返回 nul的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?