gpt4 book ai didi

java - 覆盖单个 Spring Boot 测试的属性

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:58 25 4
gpt4 key购买 nike

考虑以下示例:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
properties = {
"some.property=valueA"
})
public class ServiceTest {
@Test
public void testA() { ... }

@Test
public void testB() { ... }

@Test
public void testC() { ... }
}

我正在使用 SpringBootTest注释的 properties要设置的属性 some.property此测试套件中所有测试的属性值。现在我想为其中一个测试(假设 testC )设置此属性的另一个值,而不影响其他测试。我怎样才能做到这一点?我读过 "Testing" chapter of Spring Boot docs ,但我还没有找到任何符合我的用例的内容。

最佳答案

您的属性在 Spring 上下文加载期间由 Spring 评估。
所以你不能在容器启动后更改它们。

作为解决方法,您可以将方法拆分到多个类中,从而创建它们自己的 Spring 上下文。但请注意,这可能不是一个好主意,因为测试执行应该很快。

更好的方法是在被测类中设置一个 setter 来注入(inject)some.property 值并在测试中使用此方法以编程方式更改该值。

private String someProperty;

@Value("${some.property}")
public void setSomeProperty(String someProperty) {
this.someProperty = someProperty;
}

关于java - 覆盖单个 Spring Boot 测试的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48570766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com