我有一组属性src/main/resources/application.properties
:
app.firstprop=2
app.secondprop=3
app.thirdprop=5
app.fourthprop=7
我想覆盖app.secondprop
所有测试,同时保持其余属性不变。一种选择是:
@SpringBootTest(properties=["app.secondprop=99"])
但这意味着我必须在每个测试文件中重复这个属性值。
另一个选项是用来src/test/resources/application.properties
覆盖我的属性文件。不幸的是,我必须指定所有未更改的属性以及被覆盖的属性:
app.firstprop=2
app.secondprop=99
app.thirdprop=5
app.fourthprop=7
如果我不指定未改变的属性,它们将不会在测试期间被定义。这又是不必要的重复。
如何覆盖所有测试的单个属性并遵守 DRY 原则?
让 application-test.properties 文件仅包含您想要覆盖的属性,并将活动配置文件设置为测试。
Spring boot 会自动合并 application-test.properties 和 application.properties 文件中的属性。application-test.properties 中提到的属性会覆盖 application.properties 中提到的属性。
请参阅有关设置活动配置文件的此帖子: 在 Spring-boot 中设置默认活动配置文件
如果您希望在所有测试中使用特定的属性值,请遵循Andrew S的建议:
application-test.properties
(无需指定所有道具)test
通过激活个人资料@ActiveProfiles("test")
如果您希望在某些测试中使用特定的属性值,那么请使用测试类继承:
@SpringBootTest(properties=["app.secondprop=99"])
此外,您仍然可以在子测试类中覆盖此 prop。