Java 如何将application.properties加载到测试类中以获取spring.profiles.active值?
我正在编写集成测试,它应该只适用于特定的配置文件。问题是我应该从application.properties文件中的spring.profiles.active值获取配置文件名。但由于application.properties的实际值,我总是得到null 我已经为main方法创建了,该方法将值显式地放入System.properties中:Java 如何将application.properties加载到测试类中以获取spring.profiles.active值?,java,spring-boot,junit,Java,Spring Boot,Junit,我正在编写集成测试,它应该只适用于特定的配置文件。问题是我应该从application.properties文件中的spring.profiles.active值获取配置文件名。但由于application.properties的实际值,我总是得到null 我已经为main方法创建了,该方法将值显式地放入System.properties中: @SpringBootApplication public class MyApplication { public static void ma
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@Autowired
public MyApplication(Environment environment) {
String property = "spring.profiles.active";
System.getProperties().setProperty(property, environment.getProperty(property));
}
但该值仍然为空。
在测试类中,我使用以下注释:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = MyApplication.class)
@SpringBootTest(classes=MyApplication.class)
用于从我手动设置必要值的主类加载上下文。
还尝试使用@TestPropertySource(“classpath:application.properties”)
但没有任何帮助。我不能硬编码这个值。它应该仅从application.properties获取
更新
这是我的错误。我尝试了从静态方法获取值:/
也许有人知道如何使用这个值禁用类测试?
@IfProfileValue仍然返回null,因此不适合
更新
我意识到禁用是没有用的,最好使用@SpringBootTest(classes=properteConfigClass.class)使用适当的配置
我将选择gargkshitiz作为已解决的答案,因为他是唯一试图帮助我的人。你已经成功了一半
@TestPropertySource
读取src/test/resources
。使用重写的值添加src/test/resources/application.properties
,您应该这样做 @gargkshitiz的回答太完美了
如果您只有要读取的属性spring.profiles.active
,那么您可以按照以下方式提及它(这将使我们不必维护属性文件)
还可以指定多个属性
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT,
value={"spring.profiles.active=yourActiveProfileName",
"spring.some.other.property=propertyValue"})
如果不需要,可以删除webEnvironment=webEnvironment.RANDOM\u PORT
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT,
value={"spring.profiles.active=yourActiveProfileName",
"spring.some.other.property=propertyValue"})