Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何为测试自动使用测试属性文件,为应用程序执行自动使用源属性文件_Spring_Spring Boot_Properties_Configuration - Fatal编程技术网

Spring 如何为测试自动使用测试属性文件,为应用程序执行自动使用源属性文件

Spring 如何为测试自动使用测试属性文件,为应用程序执行自动使用源属性文件,spring,spring-boot,properties,configuration,Spring,Spring Boot,Properties,Configuration,我有一个带有源代码和测试层次结构的spring boot应用程序。 在这两个层次结构中,我都有带有属性的application.yml文件 假设我在src application.yml中有以下内容: settings1: setting1: value11 settings2 setting1: value12 其中,在测试中的application.yml中,我得到了以下结果: settings1: setting1:testValue11 我希望我的所有测试都知

我有一个带有源代码和测试层次结构的spring boot应用程序。 在这两个层次结构中,我都有带有属性的application.yml文件

假设我在src application.yml中有以下内容:

settings1:
    setting1: value11
settings2
    setting1: value12
其中,在测试中的application.yml中,我得到了以下结果:

settings1:
    setting1:testValue11
我希望我的所有测试都知道test application.yml中被重写的值,如果test application.yml中不存在某个值,则该值将从src application.yml中提取

但我希望当我的应用程序运行时,它只知道src application.yml中的设置

我怎样才能解决它?最好是配置,而不是在代码中连接值

请参阅Spring Boot参考文档中的部分

单个application.yml文件的示例如下所示

settings1:
    setting1: 192.168.1.100
settings2:
    setting1: 192.168.1.101
---
spring:
    profiles: test
settings1:
    setting1: 192.168.1.102
和一个测试用例,如下所示

@SpringBootTest
@ActiveProfiles("test")
class ApplicationTest {

    @Value("${settings1.setting1}")
    String setting1;

    @Value("${settings2.setting1}")
    String setting2;

    @Test
    void test() {
        System.out.println(setting1);
        System.out.println(setting2);
    }

}
测试用例将打印出来

192.168.1.102

192.168.1.101

编辑

对于单独/多个yml文件

除了
application.yml
,还有一个单独的
application-.yml
(此处为
application test.yml
)来定义特定于配置文件的属性。配置文件特定的配置将优先于该配置文件作为活动配置文件

例如,定义
应用程序测试.yml

settings1:
    setting1: 192.168.1.102

你的方法是一个文件而不是两个。此外,我不想在每个测试类上写下它的活动概要文件是什么。我希望在某些配置中全局设置它。我怀疑解决方案涉及引导,但不确定如何。对于单独的文件,请通读到答案的末尾。对于全局测试配置文件,请尝试从SO问题开始。有多种方法可以引导sameas,因为我说过我想要一个用于测试和执行应用程序的diff配置。我不会每次运行应用程序,然后运行测试时都更改活动配置。应用程序运行时,
application.yml
将是默认配置,不需要单独的激活/配置文件。当使用
测试
-配置文件进行测试时,
应用程序测试.yml
将与
应用程序.yml
条目一起优先考虑。如果我正确理解您的担忧,则不会在每次运行应用程序时对配置进行任何更改,并且当使用
test
profile运行测试时,会考虑覆盖的属性。如果这没用,我很抱歉。