SpringBootTest:如何使用application-test.yaml并从application.yaml继承缺失值

92vpleto  于 2023-08-02  发布在  Spring
关注(0)|答案(2)|浏览(138)

我正在尝试使用注解运行集成测试:
@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @ActiveProfiles({ "test" })
我遇到的问题是应用程序通过使用spring profile“test”加载,我有两个配置文件:application-test.yaml
应用程序.yaml包含:

xyz:
  list:
  - class-name: com.any.prod.ClassName1
    jndi-name: com/ws/ClassName1
  - class-name: com.any.prod.ClassName2
    jndi-name: com/ws/ClassName2

字符串
而另一个文件不包含这些值。这些赋值器由我使用的库使用,而不是直接由我的应用程序使用。
当我加载测试时,“test”配置文件启用,来自application.yaml的值不会被拾取。如果我将相同的值添加到application-test.yaml,它们将在绑定过程中被提取。
以下是拾取的属性:

xyz.list[0].class-name: com.any.prod.ClassName1 (loaded from application-test.yaml)
xyz.list[0].jndi-name: com/ws/ClassName1 (loaded from application-test.yaml)
xyz.list[1].class-name: com.any.prod.ClassName2 (loaded from application-test.yaml)
xyz.list[1].jndi-name: com/ws/ClassName2 (loaded from application-test.yaml)
xyz.list (loaded from application.yaml)


不幸的是,最后一个条目使属性验证失败。有没有人想到我能做些什么来解开这个谜?在这一点上,我对配置yaml文件是如何错误的理解(至少对于测试用例是这样的-当我们部署应用程序时,继承似乎工作得很好)

lnlaulya

lnlaulya1#

您可以通过使用注解@TestPropertySource来实现这一点。

alen0pnh

alen0pnh2#

我在一个类似的问题上挣扎了很长一段时间,都没能找到解决方案。经过多次尝试和错误,我发现我需要将默认概要文件和测试概要文件一起使用,以便继承属性。

@ActiveProfiles({"default","test"})

字符串

相关问题