我有一个从 Zookeeper 实例读取其配置属性的应用程序。
有一个内部 spring-boot-auto-configure 模块,可帮助从 Zookeeper 实例读取信息。
我们需要在bootstrap.properties
文件中设置zookeeper实例信息。
来自自动配置模块的 spring.factories
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.company.name.ZooKeeperAutoConfig
同一文件中还有 AutoConfiguration 类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.company.name.XyzAutoConfig
因此,当应用程序启动时,它会从 bootstrap.properties 获取信息并通过自动配置模块连接到 Zookeeper 实例。
我想使用 @WebMvcTest
注释为 Spring API Controller 层编写测试。
但即使在测试中它也会尝试连接到zookeeper实例,这是我不想要的。我不希望单元测试与外部服务通信。
我想在测试期间排除 Zookeeper 引导配置。
我尝试过几种方法,但都没有成功。
1)我尝试排除如下,但它仍然连接到 Zookeeper
@TestPropertySource(properties=
{"spring.autoconfigure.exclude=com.company.name.ZooKeeperAutoConfig"})
2)我创建了 bootstrap-test.properties 并为 Zookeeper 属性添加了一些虚拟值。在测试中我添加了 @ActiveProfile("test")
。这尝试通过虚拟值连接到zookeeper,但最终失败。
有什么方法可以完全忽略/排除 Zookeeper 引导配置。应用程序不应该知道它需要连接到zookeeper才能工作。
在测试中排除 BootstrapConfiguration 是否可行?
如果需要更多信息,请告诉我。
最佳答案
作为一个想法 - 您是否尝试过在 ZooKeeper 自动配置类上添加 @Conditional
注释?
@Configuration
@ConditionalOn....
public class com.company.name.ZooKeeperAutoConfig {
}
我无法自己检查这一点,但属性条件可能是相关的,或者如果应用程序上下文不匹配,则 org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication
应该匹配Web 应用程序上下文(但与测试相关的测试应用程序上下文)
关于java - 在 Spring Boot 中排除 BootstrapConfiguration 类进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59967476/