gpt4 book ai didi

spring - 如何测试 Spring @Conditional bean

转载 作者:行者123 更新时间:2023-12-04 01:14:52 25 4
gpt4 key购买 nike

我有一个@Conditional bean -

@RestController("/user")
@ConditionalOnProperty(prefix = "user-controller", name = "enabled", havingValue = "true")
public void UserController {

@GetMapping
public String greetings() {
return "Hello User";
}

}

它可以启用或禁用。我想创建一个测试来涵盖这两个用例。我怎样才能做到这一点?我只有一个 应用程序属性 文件:
user-controller.enabled=true

我可以将属性注入(inject) bean 并添加一个 setter 以通过代码对其进行管理,但该解决方案并不优雅:
@RestController("/user")
@ConditionalOnProperty(prefix = "user-controller", name = "enabled", havingValue = "true")
public void UserController {

@Value("${user-controller.enabled}")
private boolean enabled;

public void setEnabled(boolean enabled) {
this.enabled = enabled;
}

@GetMapping
public String greetings() {
return enabled ? "Hello User" : "Endpoint is disabled";
}

}

像这样

最佳答案

假设您使用 SpringBoot 2,您可能会像这样进行测试:

public class UserControllerTest {

private final ApplicationContextRunner runner = new ApplicationContextRunner()
.withConfiguration(UserConfigurations.of(UserController.class));

@Test
public void testShouldBeDisabled() {
runner.withPropertyValues("user-controller.enabled=false")
.run(context -> assertThat(context).doesNotHaveBean("userController "));
}
}

关于spring - 如何测试 Spring @Conditional bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47789068/

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