Java 如何将application.properties加载到测试类中以获取spring.profiles.active值?

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

我正在编写集成测试,它应该只适用于特定的配置文件。问题是我应该从application.properties文件中的spring.profiles.active值获取配置文件名。但由于application.properties的实际值,我总是得到null

我已经为main方法创建了,该方法将值显式地放入System.properties中:

@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"})